为什么我的编译器没有给我这个代码的警告或错误:
class A {};
class B : public A{};
class C : public A{};
int main(int argc,char** args)
{
B b;
A& a = b;
C c;
a = c;
}
我倾向于认为这会导致存储在“b”变量中的数据不再是“B”类型,并且会给我带来一堆问题....所以我为什么能够做这个。
最佳答案
a = c;
在 A
之间执行分配的一部分 b
, 和 A
的一部分 c
. B
和 C
这些对象的部分(如果有的话)未被修改。
一般来说,这有点危险,因为 B
和 C
对象可能没有被设计成只有它们的 A
分配的子对象。在 this thread还有其他各种处理建议operator=
在类层次结构中。
关于c++ - 引用类型和继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438760/