nab*_*bil 2 c++ polymorphism reference
有人可以向我解释最后5行,为什么当Manager是Employee的子对象时会发生这种情况?
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!
Run Code Online (Sandbox Code Playgroud)
这恰好是因为你所说的:Manager源自Employee(我猜这就是你说" Manager是子对象Employee"的意思).这意味着所有实例Manager也是实例Employee,但反之亦然.
在这里,您尝试将对a的引用绑定到Manager类型的对象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?
Run Code Online (Sandbox Code Playgroud)
如果你可以到引用绑定Manager到一个对象,它是不是真的Manager,你可以调用它的功能,实际的对象不支持.这将是混乱.因此,编译器可以防止出现这种情况.