【问题标题】:How to populate objects of derived class with data members into a pointer array of base class如何使用数据成员将派生类的对象填充到基类的指针数组中
【发布时间】:2020-08-29 03:40:31
【问题描述】:

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

在 main() 中:

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.

【问题讨论】:

    标签: c++ arrays polymorphism


    【解决方案1】:

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

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

    您对&parts 的使用将导致未定义的行为,因为在parts[element] 的populateArrayBrakes 中元素不为0 的任何访问都将超出范围。

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多