shi*_*zle 5 c++ inheritance copy-constructor
struct A{
virtual void what() { cout << "Base" << endl; };
};
struct B : A {
virtual void what() { cout << "Sub" << endl; };
int m;
B() : m(10) {};
B(const A & x) : m(50) {};
};
void main() {
B b1;
B b2 = b1;
cout << "Number: "
<< b2.m << endl;
};
Run Code Online (Sandbox Code Playgroud)
为什么不是b2.m = 50?我正在尝试复制一个b-object,我有复制构造函数B(const A&x):m(50).我是否需要为派生类屁股做一个复制c'tor?像B(const B&x)?? 我认为既然一个b对象有一个部分,我们可以使用B(const A&x):m(50)而不是默认的构造函数:: S
如果您具有带有A对象参数的函数,则可以发送B对象.它与拷贝构造函数有什么不同?
Cat*_*lus 14
原因是B(const A& x)不是copy-ctor - 类型的复制构造函数T必须始终将左值引用T作为第一个(并且没有其他非默认参数)参数.您的类没有定义的copy-ctor,因此编译器会生成默认的copy-ctor,它会执行成员方式的复制,因此为什么b2.m会相同b1.m.
如果类的非模板构造
X函数的第一个参数是type ,或,并且没有其他参数,或者所有其他参数都有默认参数(8.3.6)X&,则它是一个复制构造函数.const X&volatile X&const volatile X&