C++のコンストラクタ

C++ではメンバ変数の初期化はメソッドの外でやるらしい。
つまりは

class Hoge{
public:
 Hoge(int x,double y);
protected:
 int hoge;
 double piyo;
};

Hoge::Hoge(int x, double y): hoge(x),piyo(y){
}

てな感じ

さて、では

class Piyo : public Hoge{
public:
 Piyo(int x, int y);
};

Piyo::Piyo(int x,double y) : hoge(x),piyo(y){
}

なんてすると、いかにも動きそうだけど、どうやらダメらしい。 こう言うときは

Piyo::Piyo(int x,double y) : Hoge(x,y){
}

としてやらないとダメ。

さて

前置きが長くなったけど、実は私、HogeにStatic Factory Methodを持たせてあって、コンストラクタを用意していませんでした。

基底クラスのインスタンスは作らせたくなかったし、結局protectedなコンストラクタを作ることで対応。

なんか、微妙にスマートじゃないような気がするんだけど、この初期化子リストって。
変数の順番間違うと怒られるし、利点がイマイチわかりませんよっと。そんな話。