私は古典的な仮想継承ダイヤモンドを持っています:
class A {
protected:
A(const char *x) { ... }
}
class B: public virtual A {
protected:
B(): A(NULL) { ... }
public:
virtual void foo() = 0;
}
class C: public virtual A {
protected:
C(): A(NULL) { ... }
public:
virtual void bar() = 0;
}
class D: public B, public C {
public:
D(const char *x): A(x) { ... }
void foo();
void bar();
}
B
andで NULL を使用しますC
。これらは抽象クラスであるためA
、コンストラクターで ctor が呼び出されることはありません。NULL
コンストラクターで指定するか、パラメーターなしのコンストラクターを宣言する以外に、それを行うためのより良い方法はありますA
か? コンストラクターをパラメーターで呼び出す必要があるため、A() {}
ctor は抽象クラスでのみ許可する必要があります。