复制构造函数继承

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&