はじめに
プログラムを始めてコンストラクタという言葉を知った初学者の方向けにその基本的な役割や使い方をざっくり解説する記事です。
コンストラクタとは
コンストラクタとはオブジェクト指向プログラミング言語の多くで使われる初期化用の特別な関数です
クラスを定義し、そのインスタンスを作成した場合メンバ変数を適切に初期化できていないとロジックエラーが発生してしまいます。
その対策として初期化専用の関数をつくっても、それを実行し忘れたら元も子もない、、
そういった経緯からコンストラクタはインスタンスが宣言されたタイミングで自動的に実行されます。
コンストラクタはクラス名と同じ関数であり、返り値は存在しませんが、引数を持つことができます。
そのためインスタンスを作成した際に任意の初期値を与えることもできます。
以下はコンストラクタに引数を用いない場合と用いた場合の、初期値の設定例です。
使用方法
引数を用いない場合
class Dog {
public:
int walkspeed = 0;
std::string name = "名無し";
//引数なしコンストラクタ
Dog() {
walkspeed = 10;
name = "ぽち";
}
};
void sample(){
Dog shiba_dog; //コンストラクタ実行
std::cout << shiba_dog.name << std::endl; //出力:ぽち
}
引数を用いる場合
class Dog {
public:
int walkspeed = 0;
std::string name = "名無し";
//引数ありコンストラクタ
Dog(int _walkspeed, std::string _name) {
walkspeed = _walkspeed;
name = _name;
}
};
void sample(){
Dog shiba_dog(9,"ぽち"); //引数ありコンストラクタ実行
std::cout << shiba_dog.name << std::endl; //出力:ぽち
}
コンストラクタに引数を用いるとインスタンスごとに異なる値で初期化ができます。
デストラクタ
コンストラクタが生成された時に自動的に実行されるのに対して、デストラクタはインスタンスが消滅する時に自動的に実行されます。
ここにはメモリの解放等の後始末処理を書きます。
デストラクタの関数名はクラス名の先頭に~をつけたものになります。また、コンストラクタと違ってデストラクタには引数を持たせることができません。
class Dog {
public:
int walkspeed;
std::string name;
//コンストラクタ
Dog(int _walkspeed, std::string _name) {
walkspeed = _walkspeed;
name = _name;
}
//デストラクタ
~Dog() {
std::cout << "オブジェクトが削除されました。" << std::endl;
}
};
void sample(){
Dog shiba_dog(9,"ぽち");
std::cout << shiba_dog.name << std::endl; //出力:ぽち
}//ここでデストラクタ実行 //出力:オブジェクトが削除されました。
終わりに
コンストラクタについてざっくり理解していただけたでしょうか?
自分への備忘録も兼ねて投稿してみました、初執筆なので至らない箇所もあると思いますが、修正点等があればコメントでご指摘頂けたら幸いです!