如何使用数据成员填充派生类的对象到基类的指针数组中

How to populate objects of derived class with data members into a pointer array of base class

本文关键字:基类 指针 数组 对象 数据成员 填充 派生 何使用      更新时间:2023-10-16

当我尝试使用多态性输出类"制动器"类型的字符串的材料时,它无法正确打印。我相信问题与我实例化一个新的派生对象有关。如何在 C++ 中将数据成员填充到基类的指针数组中?抱歉,如果我没有提供足够的信息,代码格式错误 rr,这是我第一次来这里。

在主((:

Parts *partsList = new Parts[arrayCount];

函数调用:

populateArrayBrakes(&partsList,tokens,element);

用数据填充数组的函数:

void populateArrayBrakes(Parts *partsList[], string tokens[], int element){
partsList[element] = new Brakes(tokens[1],tokens[2]...);
}

但是由于某种原因,当我使用多态性输出时,输出中有空格并且材料错误(第一种材料应该是"合成混合物"(:

brakes material: 1 Organic
brakes material: 2 Organic
brakes material: 3 Organic
brakes material: 4 Ceramic
brakes material: 5 Ceramic
brakes material: 6 Ceramic
brakes material: 7 Ceramic
brakes material: 8 Ceramic
brakes material: 9
brakes material: 10 Ceramic
brakes material: 11 Carbon Metallic
brakes material: 12
Process returned -1073741819 (0xC0000005)   execution time : 1.425 s
Press any key to continue.

main中的partsList是指向Parts数组的指针。

populateArrayBrakes填充Parts *数组(指向部件的指针(。

使用&parts将导致未定义的行为,因为元素不为 0 的parts[element]populateArrayBrakes的任何访问都将超出界限。

你想要的是将partsList声明为指针数组,

Parts **partsList = new Parts *[arrayCount];

但是,应避免使用原始指针,而应使用std::vector和智能指针。