C++11 标准提供了一种从基类继承构造函数的方法。我的问题是关于早期的标准。假设我通过以下方式继承构造函数:
class Base {
public:
Base() {};
Base(int b) { a = ++b;}
virtual int foo() {return 0;}
int a;
};
class A : public virtual Base {
public:
A() {}
A(int b): Base(b) {}
int foo() {return a*a;}
};
class C : public A {
public:
C() {}
C(int b ): A(b) {}
int foo() { return (a*a + a);}
};
请注意,我有 Base 类的虚拟继承。现在,当我尝试初始化指向 C 类型对象的指针时,代码最终会调用 Base() 构造函数,而不是调用 Base(b) 构造函数。这是我使用的主要功能:
int main(){
C *c = new C(5);
std::cout << c->Base::a << std::endl;
}
“a”的输出值为0。但是,当我在继承Base类时删除virtual关键字时,会调用Base(b)构造函数并且“a”的值为6。有人可以帮我理解什么是继续?为什么使用虚拟继承调用默认构造函数?