#13 C++で学ぶクラスの基本

C++のクラスは、Javaなどのクラスの元になった、歴史のある仕組みです。この記事では、C++におけるクラスの基本と、アクセス制御の考え方を解説します。

クラスを作ってみる

class Person {
public:
    std::string name;

    Person(std::string name) {
        this->name = name;
    }

    void greet() {
        std::cout << "こんにちは、" << name << "です" << std::endl;
    }
};

public:という部分は、クラスの外から自由にアクセスできる範囲を示しています。

クラスからインスタンスを作る

Person person("太郎");
person.greet();

C++では、Javaのようにnewを必ず使う必要はなく、このようにシンプルに書くこともできます(newを使う書き方も存在しますが、メモリ管理の責任が発生するため、学習の最初はこちらの書き方が安全です)。

private・protectedという他のアクセス範囲

privateを付けたメンバーは、クラスの外から一切アクセスできません。

class Person {
private:
    int age;

public:
    void setAge(int newAge) {
        if (newAge >= 0) {
            age = newAge;
        }
    }
};

このように、直接の書き換えを禁止し、専用のメソッド(setAgeなど)経由でのみ変更できるようにすることで、不正な値が入ることを防げます。protectedは、継承したクラスからはアクセスできるが、それ以外の外部からはアクセスできない、という中間的な範囲です。

C++ならではの注意点

C++にはpublic・private・protectedという3種類のアクセス範囲があり、書かなかった場合はprivate(非公開)がデフォルトになります。他の言語の感覚でクラスを作ると、うっかり全てが非公開になってしまうことがあるため、公開したい部分にはpublic:を忘れずに書きましょう。ちなみにstructキーワードを使った場合は、デフォルトが逆のpublicになるという違いもあります。

デストラクタという後片付けの仕組み

C++のクラスには、インスタンスが破棄される際に自動的に呼ばれる「デストラクタ」という特別なメソッドもあります。

class Person {
public:
    ~Person() {
        std::cout << "破棄されました" << std::endl;
    }
};

コンストラクタがクラス名()なのに対し、デストラクタは先頭に~を付けた~クラス名()という形で書きます。確保したメモリの解放など、後片付けの処理を書くのに使われます。

まとめ

C++のクラスはpublic・private・protectedでアクセス範囲を制御します。デフォルトが非公開である点、structとの違い、デストラクタによる後片付けも覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

C++をもっと学びたい方には「新・明解C++入門編」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本