我有以下代码:
class A
{
};
class B: public virtual A
{
public:
B()
{
cerr << "B()";
}
B(const A& a)
{
cerr << "B(const A&)";
}
};
class C: public B
{
};
int main(int argc, char **argv)
{
B *b = new B(C());
}
令我惊讶的是 B(const A& a) 没有被调用。这是为什么?
最佳答案
B
也有一个隐式声明的复制构造函数,声明为
B(const B&);
调用这个隐式声明的成员函数是因为它比用户声明的构造函数 B(const A&)
更适合 C
类型的参数。
关于C++虚拟继承和类型转换/复制构造函数混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3761587/