gpt4 book ai didi

c++ - 将基类对象分配给派生类

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:37 26 4
gpt4 key购买 nike

假设我正在创建两个类的对象:

BaseClass B;
DerievedClass D;

然后我在做:

B=D;
D=B;

哪些是合法的,为什么。这是一个C++相关工作的面试官问的问题。我知道的主要是 B=D;将有效(对象切片);但是否 D=B;仅当 B 具有默认构造函数时才有效?是的,那为什么呢?

最佳答案

B=D;
D=B;

第一行将始终编译。第二行可能编译也可能不编译,因为它完全取决于您如何编写每个类。其余的答案将阐明它。继续阅读。


is it so that D=B; will only be valid if B has a default constructor?

没有。

D=B 仅当 D 定义了以 B 为参数的 operator= 时才有效。

Derived & operator=(const Base &base); //member of Derived

Base B;
Derived D;
D = B; //allowed - assignment

或者如果你在 D 的初始化中这样做,那么它只有在 D 的构造函数将 B 作为参数时才有效。

Derived(const Base &base); //a constructor of Derived

Base B;
Derived D = B; //allowed - initialization

或者 B 定义了到 D 的用户定义转换。

operator Derived(); //member of Base

Base B;
Derived D = B; //allowed - initialization
D = B; //also allowed - assignment

关于c++ - 将基类对象分配给派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7851273/

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