#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿