gpt4 book ai didi

c++ - vector 填充不同的对象

转载 作者:行者123 更新时间:2023-11-28 01:40:39 24 4
gpt4 key购买 nike

我在执行以下任务时遇到了一些问题。

起初我有一个只有一种类型的对象(自行车)的 vector 。

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

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

我类的名字是自行车。

从这个类中我派生了两个新类,它们是山地自行车的 MTB 和 E_Bikes。我再次读取文件并将它们作为 MTB 或 E_Bike 对象存储到我的 vector 中,如下所示:

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);
}

现在我想做同样的事情。但这次我想从这个 vector 中打印山地车或电动自行车。

也许 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();
}

关于c++ - vector 填充不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47289423/

24 4 0
文章推荐: javascript - 把JS应用到工作中
文章推荐: javascript - 在不影响背景的情况下删除图像 Canvas 上的线条
文章推荐: javascript - jQuery 验证不适用于该表单
文章推荐: html - Materialise
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com