填充不同对象的矢量

Vector filled with different object

本文关键字:对象 填充      更新时间:2023-10-16

我在以下任务中遇到了一些麻烦。

起初,我有一个只有一种对象(自行车(的矢量。

我可以使用此对象将它们放入一个类中,并使用一个函数来打印出这些自行车的品牌和型号,如下所示:

for (Bike* b1  : vecBikes) {
        b1->printBrandModel();
    }

我的班级的名字是自行车。

从这门课中,我衍生出两个新类,分别是山地自行车和E_Bikes山地车。我再次读取该文件并将它们作为 MTB 或E_Bike对象存储到我的矢量中,如下所示:

while (inputFile >> brand >> model >> modelyear >> price >> type) {
    if (type == "MTB") {
        vecBikes.push_back(new MTB(brand, model, modelyear, price));
    }
    else {
       inputFile >> energy; 
       vecBikes.push_back(new E_Bike(brand, model, modelyear, price, energy));
    }
    getline(inputFile, buffer);
}

现在我想做同样的事情。但这次我想从这个矢量打印 eihter MTB 或E_Bikes。

也许dynamic_cast是要走的路,但我是这个主题的完全初学者,所有这些示例书籍和网站都无法以某种方式帮助我。我希望你能帮我解决这个问题;-(

您可以使用

dynamic_cast来确定对象类型,如下所示:

for (Bike* b1  : vecBikes) {
    if(dynamic_cast<MTB*>(b1) != nullptr) {
            b1->print_MBT();
    } else if (dynamic_cast<E_Bikes*>(b1) != nullptr) {
            b1->print_E_Bikes();
    } else cout << "error" << endl;  
}

此外,如果在基类中定义printBrandModel的纯虚拟方法,则可以(必须(在派生类中根据需要实现它。因此,您可以使用第一个代码,而无需确定实例属于哪个类。

for (Bike* b1  : vecBikes) {
     b1->printBrandModel();
}