gpt4 book ai didi

c++ - C++ 中的多态性,子类型?

转载 作者:太空狗 更新时间:2023-10-29 23:45:55 24 4
gpt4 key购买 nike

谁能给我解释一下最后 5 行,为什么经理是员工的子对象时会发生这种情况?

ostream& operator << (
ostream &, const Employee &
);
Employee e;
Manager m;
Employee &eRef1 = e; // OK!
Employee &eRef2 = m; // OK!
Manager &mRef1 = e; // Compile error!
Manager &mRef2 = m; // OK!
cout << e << m; // OK!

最佳答案

这正是因为您所说的:Manager 派生自 Employee(我想这就是您所说的 ManagerEmployee" 的子对象。这意味着 Manager 的所有实例也是 Employee 的实例,但反之则不然。

在这里,您试图将对 Manager 的引用绑定(bind)到 Employee 类型的对象。但是由于 Employee 的实例不是 Manager 的实例(恰恰相反!)你会得到一个错误。

如果您想了解为什么这是正确的,请尝试想想如果您没有得到错误会发生什么:

Employee e;
// ...
Manager& m = e; // This won't work, but let's suppose it did...
int s = m.get_size_of_managed_team(); // Huh?

如果您可以将对Manager 的引用绑定(bind)到一个不是真正Manager 的对象,您可以为其调用实际对象不支持的函数。这将是困惑的。因此,编译器根本不会出现这种情况。

关于c++ - C++ 中的多态性,子类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14985595/

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