gpt4 book ai didi

c++ - 复制构造函数 - 基础构造函数是在派生构造函数之前调用的吗?

转载 作者:太空狗 更新时间:2023-10-29 23:36:18 27 4
gpt4 key购买 nike

我不明白类层次结构中的复制顺序是如何工作的

这段代码:

class Base
{
protected:
void myBaseMethod()
{
cout << "basemethod";
}

Base() { cout << "default constructor - base"; }
~Base() { }

Base(Base& other)
{
cout << "copy constructor - base";
}
Base& operator= (Base const &)
{
cout << "assignment operator - base";
}

};

class Derived : private Base
{
public:
Derived()
{
cout << "default constructor - derived";
}
};

int main()
{

Derived eaObj;

Derived efu = eaObj;

return 0;
}

按预期输出“默认构造函数 - 基”“默认构造函数 - 派生”,然后输出“复制构造函数 - 基”。

复制对象时会调用哪些复制构造函数?首先是基类,然后是派生类?如果它们是虚拟的怎么办?

最佳答案

调用的拷贝构造函数是对象,在您的例子中,Derived。编译器生成的拷贝构造函数调用每个基的复制构造函数,并且由于您没有为 Derived 提供复制构造函数,这就是你的情况。

如果定义了复制构造函数,您需要显式地称之为基地;否则,默认构造函数基地将被调用。 (在极少数情况下,这就是通缉。但通常不会。)

如果继承是虚的,虚的构造函数从最派生的类中调用基类。复制构造函数像这里的任何其他构造函数一样工作:如果最派生类有一个编译器生成的拷贝构造函数,它会调用拷贝每个虚拟基地的构造者;如果它有一个用户定义复制构造函数,由程序员调用基的复制构造函数。 (根据我的经验,这种情况很少见对于包含数据成员的虚拟基,所以拷贝构造函数和默认构造函数都做同样的事情。)

关于c++ - 复制构造函数 - 基础构造函数是在派生构造函数之前调用的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com