宣言内で変数を初期化することはできません。
class Apple: public Fruit{
public:
bool isAppleOK;
Apple(int amount, int pHValue) : amount(amount), pHValue(pHValue),
isAppleOK(false)
{
}
~Apple() {
}
};
完全に関連しているわけではありませんが、コンパイラが変換する可能性があるため、初期化リストも使用します。
class Apple:public Fruit{
public:
bool isAppleOK;
Apple(int amount, int pHValue) {
amount = amount;
pHValue= pHValue;
}
~Apple() {
}
};
に
class Apple:public Fruit{
public:
bool isAppleOK;
Apple(int amount, int pHValue): amount(), phValue(),
isAppleOk() {
amount = amount;
pHValue= pHValue;
}
~Apple() {
}
};
コンストラクターのパラメーターとして複雑な型がある場合、最初にクラスメンバーが初期化され、その後新しい値が割り当てられるため、各オブジェクトの構築でオーバーヘッドが発生する可能性があります。
初期化リストを使用すると、これはオーバーヘッドなしで同時に実行されます。