拷贝构造函数继承
Copy-constructor inheritance
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;
};
为什么b2不是。M = 50?我试图复制一个B对象,我有复制构造函数B(const a &X): m(50)。我是否需要为派生类做一个副本?像B(const B&x) ?我想既然B对象有a部分,我们可以使用B(const a &x): m(50)而不是默认构造函数::S
如果你有一个函数的参数是a对象,你可以发送一个B对象。它与复制构造函数有什么不同?
原因是B(const A& x)
不是复制构造函数- T
类型的复制构造函数必须始终以对T
的左值引用作为第一个参数(并且没有其他非默认参数)。您的类没有定义copy-ctor,所以编译器会生成默认的,它会按成员进行复制,这就是为什么b2.m
与b1.m
相同。
类
X
的非模板构造函数是复制构造函数,如果它的第一个形参是X&
、const X&
、volatile X&
或const volatile X&
类型,并且没有其他形参或其他所有形参都有默认实参(8.3.6)。
复制构造函数必须具有相同的类型。
实际上并没有创建复制构造函数。B(const A & x)
只是一个构造函数,通过引用获取const A
。
因此,您不需要为派生类"as well"创建一个,而是"at all"。如您所述,此类型将为B(const B &x)
。
B类型类的默认复制因子为B(const B&)。因为你没有指定这个,编译器会为你生成它。
与用户定义的方法不同,这些方法不能由编译器生成。
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- C++继承:构造函数中的字符串构造
- 继承构造函数和其他变量的解决方法
- 带有此指针的模板类多重继承构造函数不起作用?
- 虚拟继承构造函数的组装
- C++继承构造函数的可见性
- 继承构造函数(ISO 2011 SEC 12.9第7段)
- 没有C 11的继承构造函数
- 使用关键字继承构造函数时出乎意料的行为
- 继承构造函数不允许类似数组的初始化
- 从基于QObject的类继承构造函数
- 继承构造函数并提供新的重载:无参数基构造函数似乎不参与重载解析
- C++多继承构造函数
- 具有独占继承构造函数的类的值初始化
- C++ 继承构造函数重写
- 继承构造函数与转发
- 默认情况下继承构造函数 noexcept(true)
- 有没有办法在继承构造函数时访问初始值设定项列表
- 从 std::function 继承构造函数时"function returning a function"