【发布时间】:2020-03-25 13:09:54
【问题描述】:
我有一个带有一些派生类的 C++ 基类。如果我稍后通过继承扩展基类,它可以反映已经派生类中的更改。为了让我的问题更清楚,请考虑以下代码。
#include <iostream>
class FourWheelVehicle
{
public:
FourWheelVehicle()
{std::cout<<"FourWheelVehicle created\n";}
};
class Car: public FourWheelVehicle
{
public:
Car()
{std::cout<<"Car created\n";}
};
class Toyota: public Car
{
public:
Toyota()
{std::cout<<"Toyota Car created\n";}
};
class Audi: public Car
{
public:
Audi()
{std::cout<<"Audi Car created\n";}
};
int main()
{
Toyota t;
std::cout<<"..............................\n";
Audi a;
return 0;
}
如何将 FourWheelVehicle 扩展到 FourWheelVehicleWithSeatBelt,以便我之前派生的所有汽车都可以在不更改代码的情况下获得安全带? 我尝试了以下方法:
FourWheelVehicle
/ \
/ \
/ \
Car \
/\ \
/ \ \
Toyota Audi FourWheelVehicleWithSeatBelt
class FourWheelVehicleWithSeatBelt: public FourWheelVehicle
{
public:
FourWheelVehicleWithSeatBelt()
{std::cout<<"FourWheelVehicleWithSeatBelt created\n";}
};
上面的方案好像不行!
【问题讨论】:
-
您说“所有”派生类都应该得到更改,那么为什么要创建一个新类呢?只需将安全带添加到
FourWheelVehicle。 -
@JaMiT:很抱歉造成混乱。我想完整地保留 FourWheelClass,以便有人可以选择带或不带安全带的汽车!同时,我不想写所有的子类,因为代码在所有类中都是一样的!
-
为什么不创建一个基类 seatBelt 并从 FourWheelVehicle 和 SeatBelt 派生新类? : 奔驰: public FourWheelVehicle, SeatBelt { ... 正如@Frontoge 建议的那样
标签: c++ c++11 inheritance polymorphism