C++ コンストラクター初期化リスト:その理由と使用方法
オブジェクトをインスタンス化するとき、コンストラクターはメンバー変数の初期化を処理することがよくあります。このようなメンバーの場合、コンストラクターの初期化リストは、コンストラクターの本体が実行される前に初期化を行う短縮された効率的な方法を提供します。パフォーマンスとは別に、const 変数または基本クラスのメンバーのために必須の場合もあります。
コンストラクター初期化リストとは何ですか?
コンストラクタ初期化リストは、メンバー変数を直接初期化するプロシージャであるため、コピーされて割り当てられるデフォルトのコンストラクタはありません。
構文
コンストラクター リストの初期化の構文は次のとおりです。
ClassName(type1 param1, type2 param2) : member1(param1), member2(param2) {
// Constructor body
}
ここで、member1 と member2 は、コンストラクター本体が実行される前に param1 と param2 で初期化されます。
コンストラクター初期化リストの例
ここでは、初期化リストの使用方法を示す簡単な例を示します。
#include <iostream>
#include <string>
class Student {
public:
Student(const std::string& name, int age) : name(name), age(age) {}
void display() const {
std::cout << "Name: " << name << ", Age: " << age << "\n";
}
private:
std::string name;
int age;
};
int main() {
Student s("Navya", 20);
s.display();
return 0;
}
出力
Name: Navya, Age: 20
コンストラクター初期化リストを使用する理由
- デフォルトの初期化とその後の再割り当てを回避し、時間とリソースを節約するため。
- 特定の種類の const 変数、参照メンバー、基本クラス メンバーには必須です。
- すべての初期化ロジックをコンストラクター本体とは別に 1 か所に保持します。
特殊な場合
以下では、コンストラクター初期化リストのいくつかの特殊なケースについて説明します -
Const または参照メンバー
Const 変数と参照メンバーは再割り当てできないため、初期化リストで初期化する必要があります。
class Config {
public:
Config(const std::string& product, const int & model)
: product (product), model(model) {}
private:
const std::string product;
const int & model;
};
基本クラスの初期化
派生クラスが基本クラスから継承する場合、初期化リストを使用して基本クラスのコンストラクターを呼び出すことができます。
class Base {
public:
Base(int value) : baseValue(value) {}
protected:
int baseValue;
};
class Derived : public Base {
public:
Derived(int value, int extra) : Base(value), extraValue(extra) {}
private:
int extraValue;
};
C言語