C++派生类的复制构造函数的初始化为什么用基类,而不是派生类对象 他的复制过程是怎样的

2025-02-25 14:42:20
推荐回答(3个)
回答1:

你的问题提的有点模糊,大概你想问派生类复制构造函数的执行过程:
假设基类复制构造函数的原型为Base(const Base &b),
通过公有派生出的派生类复制构造函数的原型为Derived(const Derived &d);
则Derived类的复制构造函数的执行过程为:
Derived(const Derived &d):Base(d)//由于构造函数不能被继承,而且派生类不能直接访问基类的私有成员, 因此需要使用初始化列表来初始化基类的私有数据成员
{
//初始化Derived类声明中自己声明的数据成员
}

回答2:

派生了在调用copy construct的时候是会先调用基类的copy construct函数。

我们可以将派生类对象看成是两部分,一部分是基类部分,另外一部分是派生类部分。《深度探索c++ 对象模型》中对基类和派生类对象的构造有详细的说明。

派生类在拷贝的时候就是先基类对象拷贝,然后再拷贝派生类对象部分。可以参考《c++ primer》

回答3:

构造函数要初始化的?你到底想表达什么?最好把你有疑问的代码发上来