gpt4 book ai didi

c++ - 未调用复制构造函数的虚拟辅助函数

转载 作者:行者123 更新时间:2023-11-27 22:42:16 25 4
gpt4 key购买 nike

此代码的输出产生“BASE!”。为什么在这个例子中没有调用派生类的复制函数。它们具有相同的签名,根据我的推理,应该调用派生的签名。有什么问题?

#include <iostream>
using namespace std;

class Base{
virtual void copy(const Base&b){
cout<<"BASE!";
}
public:
Base()=default;
Base(const Base&b){
copy(b);
}
};

class Derived: public Base{
void copy(const Base&b) override{
cout<<"DERIVED";
}
};

int main() {
Derived d;
Derived b(d);
return 0;
}

最佳答案

它没有被调用,因为它还不存在。

首先构造基类。它的复制构造函数调用虚方法。派生类在基类首先被构造之前不会被构造,因此基类中的虚类方法不会被任何东西覆盖。

只有当派生类构造开始时,虚类方法才会被派生类覆盖。

派生类实例在实际构建之前根本不存在,并且在基类完全构建之前不构建,因此在基类构建期间,虚方法不会被任何东西覆盖。

关于c++ - 未调用复制构造函数的虚拟辅助函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47824626/

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