我有一个经典的虚拟继承钻石:
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();
}
我使用 NULLB
并且C
因为它们是抽象类,所以A
永远不会在它们的构造函数中调用 ctor。NULL
除了在构造函数中指定或在中声明无参数构造函数之外,还有更好的方法A
吗?我希望使用参数调用构造函数,因此A() {}
应该只允许在抽象类中使用 ctor。