Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ コンストラクタ初期化リスト | イントロダクション
C++のクラスとオブジェクト

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

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

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

初期化リストの構文

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

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

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

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

temperature_sensor.h

temperature_sensor.h

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

制限事項と考慮点

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

main.cpp

main.cpp

copy
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

copy
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

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

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

すべて明確でしたか?

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

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

セクション 1.  11

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 1.  11
some-alt