導入
インスタンスを作った直後にメンバを初期化したい――そのための特別なメンバ関数が「コンストラクタ」です。作り忘れ・初期化忘れを防ぐ、クラスの重要な仕組みです。
説明
コンストラクタは「クラス名と同じ名前・戻り値なし」の関数で、インスタンス生成時に自動で呼ばれます。
#include <iostream>
#include <string>
using namespace std;
class Dog {
public:
string name;
int age;
Dog(string n, int a) { // コンストラクタ(作るときに呼ばれる)
name = n;
age = a;
}
void bark() {
cout << name << "(" << age << "歳): ワン!" << endl;
}
};
int main() {
Dog pochi("ポチ", 3); // 生成と同時に name, age が入る
pochi.bark(); // ポチ(3歳): ワン!
return 0;
}
引数の違うコンストラクタを複数用意できます(オーバーロード)。引数なしで作れるようにする「デフォルトコンストラクタ」も定義できます。
flowchart TB a["Dog()<br/>引数なし → 既定値で作る"] b["Dog(string n)<br/>名前だけ指定"] c["Dog(string n, int a)<br/>名前と年齢を指定"] a --- b --- c
#include <iostream>
#include <string>
using namespace std;
class Dog {
public:
string name;
int age;
Dog() { name = "名無し"; age = 0; } // 引数なし
Dog(string n, int a) { name = n; age = a; } // 引数あり
};
int main() {
Dog a; // 引数なし → 名無し, 0
Dog b("ハチ", 5); // 引数あり
cout << a.name << " / " << b.name << endl; // 名無し / ハチ
return 0;
}
まとめ
コンストラクタは「生成時の初期化」を保証する仕組みです。名前はクラス名と同じ・戻り値なし。引数違いで複数用意でき、初期化忘れによるバグを防げます。