所以我有一个名为item的主父类,这个类有两个子类,名为book和periodical。我想要做的是让一个多态数组或一个多态向量能够这样做:现在这个例子在C#中(但我想在C++中这样做)
item [ ] items = new items [100];
items[0] = new book();
items[1] = new periodical();
for (int i = 0; i < items.size; i++ ) {
items[i].read();
}就像我说的,小示例代码在C#中,但是我想在C++中这样做,但我不知道如何处理它。我想使用数组,但我的研究,我还没有找到一个明确的方法来完成这一点。我也认为向量是否可以使用或这个,但我也不确定。
发布于 2022-07-12 14:06:24
下面是一个例子(如果您有问题,请告诉我):
#include <iostream>
#include <memory>
#include <vector>
class Item
{
public:
virtual ~Item() = default; // base classes with virtual methods must have a virtual destructor
virtual void read() = 0;
};
class Book final :
public Item
{
public:
void read() override
{
std::cout << "book read\n";
}
};
class Periodical final :
public Item
{
public:
void read() override
{
std::cout << "periodical read\n";
}
};
int main()
{
std::vector<std::unique_ptr<Item>> items;
// use emplace_back for temporaries
items.emplace_back(std::make_unique<Book>());
items.emplace_back(std::make_unique<Periodical>());
// range based for loop over unique_pointers in items
// use const& so item cannot be modified and & to avoid copy of unique_ptr (unique_ptr doesn't have a copy constructor)
for (const auto& item : items)
{
item->read();
}
return 0;
}https://stackoverflow.com/questions/72953293
复制相似问题