假设您具有以下对象层次结构:
class Vehicle {
public:
virtual ~Vehicle() {}
};
class LandCraft: public Vehicle {};
class Truck: public LandCraft {};
Run Code Online (Sandbox Code Playgroud)
现在,我们有两个表达式:
Truck truck;
Vehicle& vehicle = truck;
Run Code Online (Sandbox Code Playgroud)
根据作业的解决方案,第二个表达无效.但为什么?我的编译器根本没有抱怨,我也没有看到这里应该出错的地方.
听起来好像家庭作业解决方案不正确.从派生的实例初始化对基类型的引用没有任何问题.
编辑
正如有几个人指出的那样(特别是Slaks)虽然这个声明本身没有任何问题,但它确实提供了未来发生错误的可能性.它允许你任意地把任何东西Vehicle放到一个期望的地方Truck.例如,考虑以下内容
Truck truck;
Vehicle& reallyATruck = truck;
reallyATruck = LandCraft();
Run Code Online (Sandbox Code Playgroud)
哎呦!