0

关于:数组 C++ 中的子类

大家好,对不起,因为我被困在一些工作上。

基本上这就是发生的事情

我有一个父类呼叫车辆,它有 2 个子类呼叫

Car and Motorcycle

父类具有以下值:

string Name: value either Car or MotorCycle
wheels : 4 or 2 (depends is car or motorcycle)
Notes On Wheel:
wheel[0] : Fine condition
wheel[1] : need some repair
wheel[2] : Fine condition
wheel[3] : Fine condition

我想知道如何在 VehicleTwoD Array 中记录这一切

Car / Motorcycle 是 Vehicle 的子类,你们有什么建议。我尝试创建 VehicleTwoD vehtwod[100] 的对象;

然后我做一个for循环来提示。但是我如何将对象汽车/摩托车记录到我的 VehicleTwoD 数组中,以及如何在里面记录字符串数组。所以每个 VehicelTwoD 数组元素都包含信息

Name ( Motorcycle or Car)
Wheel ( depend on name - 2 or 4)
String array - notes size depend on what is choosen

我如何在 1 个数组中记录所有内容。

非常感谢,我知道这是多态的,我知道这是 OOP,我知道我需要更多学习。但我真的坚持这部分创建可以容纳其他数组的数组。

谢谢!

4

1 回答 1

2

通过不解决存储阵列的无关维度来简化解决方案。

创建一个指针数组Vehicle,并存储它们:

vector<unique_ptr<Vehicle>> vehicles_;
vehicles_.push_back(new Car(...));
vehicles_.push_back(new Motocycle(...));

由于我们在unique_ptr这里使用的是原始指针而不是原始指针,因此无需显式delete.

通过使类具有多态性,您可以在基类上声明函数并通过在派生类中提供定义来实现类特定功能。这使得可以通过指向基类的指针调用方法,而不必强制转换为派生类型。

如果您需要调用仅存在于派生类上的方法,则需要转换指针。这应该使用dynamic_cast, 并要求您的类是多态的。

编辑:

您的评论表明您不知道如何使用 avector并且更愿意使用原始数组。那也很好。这是一个使用 C 风格的原始指针数组的简化示例。请注意,既不使用vector也不使用智能指针unique_ptr会使您的代码更脆弱且容易出错,并且您通常必须使用幻数来表示数组大小(这是粗略的)。

Vehicle* vehicles_[100];
vehicles_[0] = new Car(...);
vehicles_[1] = new Motorcycle(...);
于 2012-10-25T18:38:09.560 回答