我在执行以下任务时遇到了一些麻烦。
起初我有一个只有一种物体(自行车)的矢量。
我可以使用这些对象将它们放入一个类中并使用函数打印出这些自行车的品牌和型号:
for (Bike* b1 : vecBikes) {
b1->printBrandModel();
}
我班的名字叫Bike。
在这个课程中,我派出了两个新课程,分别是Mountain Bikes和E_Bikes的MTB。 我再次读取文件并将它们作为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);
}
现在我想要做同样的事情。但是这次我想从这个载体打印出MTB或E_Bikes。
也许一个dynamic_cast是要走的路,但我是这个主题的完全初学者,所有这些示例书籍和网站都无法以某种方式帮助我。 我希望你能帮我解决这个问题; - )
答案 0 :(得分:2)
您可以使用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();
}