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);}
};
Run Code Online (Sandbox Code Playgroud)
请注意,我正在使用Base类的虚拟继承.现在,当我尝试初始化指向C类型对象的指针时,代码不再调用Base(b)构造函数,代码最终调用Base()构造函数.这是我使用的主要功能:
int main(){
C *c = new C(5);
std::cout << c->Base::a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
"a"的输出值为0.但是,当我继承Base类时删除virtual关键字,然后调用Base(b)构造函数并且"a"的值为6.有人可以帮助我理解什么是继续?为什么使用虚拟继承默认构造函数被调用?