スーパークラスのコンストラクタ呼び出し
Javaであれば、
class Base{ private int hoge; private Base(){} //privateにする public Base( int hoge ){ this.hoge = hoge; } } class Inherited extends Base{ public Inherited( int hoge ){ super( hoge ); } }
これだけでいいのですけど、C++で、
class Base{ Hoge _hoge; Base(){} public: Base( int hoge ){ _hoge = hoge; } }; class Inherited : public Base{ public: Inherited( int hoge ){ Base::Base( hoge ); } };
こうやって書くと、
error C2248: 'Base::Base' : private メンバ (クラス 'Base' で宣言されている)にアクセスできません。
と表示されて上手くいきません。
なので、C++だと、派生クラスのデフォルトコンストラクタ以外から、基底クラスのデフォルトコンストラクタ以外を呼び出すのは不可能なのだと思っていたのですけど、
class Inherited : public Base{ public: Inherited( int hoge ) : Base( hoge ) {} };
こうすればいいらしいです。
……今まで知らなかった(;´Д`)