私の知る限り、C++ ではコンストラクターを継承できません。しかし、ベースをインスタンス化するのと同じ方法で、継承されたクラスをインスタンス化できるように見えることが必要になる場合があります。
struct Base {
int i;
int const j;
Base(int i, int j) : i(i), j(j) {}
};
// option 1)
struct Derived1 : Base {
Derived1(int i, int j) : Base(i,j) {}
};
Base* baseFactory() {
return new Derived1(42,47);
}
// option 2)
struct Derived2 : Base {
};
Base* baseFactory() {
Base* b = new Derived2();
b->i = 42;
b->j = 47; // broken!
// alternative could be to implement Base::operator=
return b;
}
派生クラスは、基本クラスがない場合、デフォルトで構築される可能性があることに注意してください。
オプション 1 は通常行われていることだと思いますが、新しいことを何も表現せずにコードを入力しています。オプション 2const
では、すべてが代入可能でなければならないため、正確性が損なわれます (また、参照をメンバーとして使用できなくなります)。
これを回避する良い方法はありますか?
編集: C++11 は素晴らしいですが、残念ながら C++03 ソリューションが必要です。