假设您具有以下对象层次结构:
class Vehicle {
public:
virtual ~Vehicle() {}
};
class LandCraft: public Vehicle {};
class Truck: public LandCraft {};
现在,我们有两个表达式:
Truck truck;
Vehicle& vehicle = truck;
根据一项作业的解决方案,第二个表达式无效。但为什么?我的编译器一点也不提示,在这里我看不出应该怎么做。
最佳答案
听起来家庭作业解决方案是不正确的。从派生实例初始化对基本类型的引用没有错。
编辑
正如一些人指出的(尤其是Slaks),虽然此声明本身没有错,但它确实为将来的错误提供了可能。它允许您将任何Vehicle
随意放入需要Truck
的地方。例如考虑以下
Truck truck;
Vehicle& reallyATruck = truck;
reallyATruck = LandCraft();
哎呀!