アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++プログラミングをする上で、少々気になった点があるので質問させてください。

class CSuper
{
int _a,_b;

public:

CSuper(int a,int b);

SetA(int a){ _a = a; }
SetB(int b){ _b = b; }
};

このようなクラスがある時

CSuper :: CSuper(int a, int b)
: _a(a),_b(b)
{
}

とするのと

CSuper :: CSuper(int a, int b)
{
_a = a;
_b = b;
}

とするのとでは、何か違いやメリット等はあるのでしょうか?

また、

サブクラスのコンストラクタで

CSub::CSub(int a, int b)
: CSuper(a,b)
{
}

とするのと、

CSub::CSub(int a, int b)
{
SetA(a);
SetB(b);
}

とするのとでは、なにか違いはあるのでしょうか?

よろしくお願いします

A 回答 (2件)

違います。



CSuper :: CSuper(int a, int b)
: _a(a)
{
_b = b;
}

のばあし、_a は a で初期化されます。
_b はデフォルト値で初期化され、 b が代入されます。

つまり、_b に対してはコンストラクタと代入が働きます。二度手間です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

なるほど、今まで意識していませんでしたが、そういう動きだったんですね。

お礼日時:2009/12/28 06:27

もう一点、


既に回答にあるとおり、
_a(a) は、初期化
_a = a は、代入
ですので、
たとえば、const int _a;
という、const な、メンバ変数に対しては、_a(a) しか使えないというのがあります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

たしかにconstは、そのような形で値を決めますね。
その記述が可能で、代入が不可能なのは、代入とコンストラクタを呼ぶ、という違いによるものだったのですね。

ありがとうございました。

お礼日時:2009/12/28 16:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!