不应该在整个继承链中使用复制构造函数吗?
#include<iostream>
using namespace std;
class A
{
public:
A(){ cout <<"1";}
A(const A &obj){ cout <<"2";}
};
class B: virtual public A
{
public:
B(){cout <<"3";}
B(const B & obj){cout<<"4";}
};
class C: virtual public A
{
public:
C(){cout<<"5";}
C(const C & obj){cout <<"6";}
};
class D:B,C
{
public:
D(){cout<<"7";}
D(const D & obj){cout <<"8";}
};
int main()
{
D d1;
D d(d1);
}
Run Code Online (Sandbox Code Playgroud)
输出:
13571358
Run Code Online (Sandbox Code Playgroud)
预期:
13572468
Run Code Online (Sandbox Code Playgroud)
复制构造函数仅用于D,因为D复制构造函数不调用其基类的复制构造函数.
应该声明为
D(const D &obj): A(obj), B(obj), C(obj) {cout <<"8";}
Run Code Online (Sandbox Code Playgroud)
除非我输错了什么.
该A对象需要在这里进行复制,因为它是一个虚拟基类,它是在最派生的类中构造的.
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |