gpt4 book ai didi

c++ - 几乎没有差异的类的类设计

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:07 26 4
gpt4 key购买 nike

考虑一个名为 Vehicle 的抽象类。该车辆具有以下抽象操作
- 开始- 休息- 加速

class Vehicle
{
public:
virtual void Start() = 0;
virtual void Break() = 0;
virtual void Accelerate() = 0;
};

现在考虑我们有一种从 Vehicle 类派生的特殊车辆,即 VehicleA。

Class VehicleA: public Vehicle
{
private:
double speed;
double temperature;
int id;
double miles;

public:
void Start();
void Break();
void Accelerate();
void horn();
};

如果我现在有一辆与 VehicleA 类型几乎相似但在发动机类型或颜色等其他一些特征上略有不同的车辆,这是适应类层次结构设计中如此小的变化的最佳方式。我应该

  • 定义另一个派生自 Vehicle 类的 VehicleB 类?或

  • 定义从 VehicleA 派生的另一个类 VehicleB ?或者

  • 还有别的吗?

谢谢

最佳答案

在这种情况下,您真的应该考虑组合而不是继承。

取决于类 Vehicle 对您的实际意义(请注意,在进行此类类设计时,直觉不一定是您最好的 friend :想想著名的 Square/Rectangle 案例),您可以通过以下方式声明您的 VehicleA(不要忘记 virtual 关键字):

class VehicleA: public Vehicle
{
private:
//Your specific private
Engine* m_engine;
Color* m_color;
//Add any "modifiable" part as long as it fits

public:
virtual void Start();
virtual void Break();
virtual void Accelerate();
void horn();
};

EngineColor 两个类(可以是抽象的也可以不是)保存你想要实现的细节。

你添加了另一个抽象层次:你的VehicleA有一个引擎(有自己的接口(interface)),但不关心它的细节(只要引擎有一个接口(interface),车辆就可以交互与), 并使添加新型引擎成为可能。

作为设计层次结构时的一般规则,如果您认为必须实现特定类的新派生类,请问自己以下问题:

这个类是它父类的更具体的版本吗?

在您的情况下,感觉 VehicleB 不会是 VehicleA 的更具体版本,尽管这仍然是一个见仁见智的问题,因为它完全取决于您想要做什么。在这种情况下,感觉应该采用组合方式。

关于c++ - 几乎没有差异的类的类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943937/

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