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

Regarding: Child Class in a Array C++

本文关键字:子类 C++ 数组 关于      更新时间:2023-10-16

关于:数组中的子类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阵列中记录这一切

汽车/摩托车是车辆的儿童类,你们有什么建议。我尝试创建一个 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,我知道我需要更多研究。 但我真的坚持在这一部分创建可以容纳其他数组的数组。

谢谢!

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

创建Vehicle指针数组,并存储这些指针:

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

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

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

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

编辑:

您的评论表明您不知道如何使用vector,并且更喜欢使用原始数组。 那也没关系。 下面是一个简化的示例,它使用 C 样式的原始指针数组。 请注意,既不使用vector也不使用像unique_ptr这样的智能指针会使代码更脆弱且容易出错,并且通常必须使用幻数作为数组大小(这是粗数)。

Vehicle* vehicles_[100];
vehicles_[0] = new Car(...);
vehicles_[1] = new Motorcycle(...);