Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ コンストラクタ初期化リスト | コンストラクタとデストラクタ
C++オブジェクト指向プログラミング

コンストラクタ初期化リスト

メニューを表示するにはスワイプしてください

初期化リストは、コンストラクタ本体が実行される前にクラスメンバーを初期化する方法。複雑な初期化や、constメンバーを持つクラスオブジェクトを扱う場合に特に有用。

初期化リストの構文

初期化リストの構文は一見複雑で分かりにくい場合がある。単純な代替手段としてコンストラクタのみを使うことも考えられるが、プログラムが拡張されるにつれて、初期化リストは便利で扱いやすい方法であることが分かる。

  • : (コロン記号): コンストラクタでメンバー初期化リストを導入する記号;

  • member (value): クラスメンバー変数が値(コンストラクタに渡された引数)で初期化される;

  • { } (波括弧): コンストラクタの本体で、メンバー初期化後に追加のコードを実行できる。

temperature_sensor.h

temperature_sensor.h

1234567
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };

制限事項と考慮点

初期化リストにおける初期化順序について、一般的な誤解が存在します。多くの人が考えているのとは異なり、初期化リストで変数を記述した順番で初期化が行われるわけではありません。実際には、初期化リストの記述順ではなく、クラス内でのメンバー宣言順に初期化が行われます

main.cpp

main.cpp

123456789101112131415
#include <iostream> class Exchanger { public: Exchanger(float _quantity, float _rate) : quantity(_quantity), rate(_rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Note
注意

初期化リストとtotal内での変数宣言におけるclass変数の初期化順序を変更してみてください。

コンストラクタで初期化リストを使用する場合、引数名はclassの属性名と同じにすることができます。

main.cpp

main.cpp

123456789101112131415
#include <iostream> class Exchanger { public: Exchanger(float quantity, float rate) : quantity(quantity), rate(rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }

しかし、メンバー変数と引数の両方に同じ名前を使用すると、total はメンバーではなく引数を掛け合わせた値になります。これを確認するには、quantity を引数ではなくゼロに設定してみてください。

1. コンストラクタ初期化リストとは何ですか?

2. コンストラクタ内でメンバー初期化リストを導入する記号はどれですか?

question mark

コンストラクタ初期化リストとは何ですか?

正しい答えを選んでください

question mark

コンストラクタ内でメンバー初期化リストを導入する記号はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  3

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  3
some-alt