c++ - 在整个继承链中复制构造
问题描述
不应该在整个继承链中使用复制构造函数吗?
#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);
}
输出:
13571358
预期的:
13572468
解决方案
复制构造函数只用于D
,因为D
复制构造函数不调用其基类的复制构造函数。
它应该被声明为
D(const D &obj): A(obj), B(obj), C(obj) {cout <<"8";}
除非我打错了什么。
该A
对象需要在这里复制构造,因为它是一个虚拟基类,它是在最派生的类中构造的。
推荐阅读
- javascript - 获取包含空格的命令参数
- r - 从坐标中检索人口普查区
- asp.net - 在 ASP.Net MVC 中重定向时将带有 QueryString 的注册用户电子邮件发送到登录页面
- c# - 在 C# 中识别对 IP 地址的 ping 请求?
- javascript - 从php代码块调用带有php变量作为参数的javascript函数
- c++ - 为什么 std::vector::push_front() 不存在?
- c# - PromptDialog.Choice 之后的操作
- java - Spring Boot:无法实例化 [com.hazelcast.jet.JetInstance]
- c# - 如何在存储库模式中使用 lambda 连接表
- html - 添加到日历按钮/链接