【发布时间】:2017-09-30 08:38:45
【问题描述】:
我想遍历所有继承自同一个超类的不同对象。这意味着我有一个这样的超类:
class fruit
{
public:
fruit()
{
}
};
我有这样的子类,它们定义了我的代码中使用的对象:
class apple: public fruit
{
public:
apple()
{
}
};
class banana: public fruit
{
public:
banana()
{
}
};
现在我想遍历所有水果(苹果、香蕉):
for ( first fuit; last fruit; next fruit )
{
// do something, no matter if apple or banana
}
但是我应该怎么做,因为苹果和香蕉是不同的类类型,但它们共享同一个超类。这就是为什么我认为必须有一种优雅的方式来做到这一点。
【问题讨论】:
-
装“所有水果”的容器是什么?因为你不能迭代一些像“所有水果”这样模糊的概念,你可以迭代一个容器。
-
要迭代,你需要一个容器。你没有提到这是一个数组、向量、链表等。
-
您将水果存放在什么容器中/它是如何声明的?如果它类似于
std::vector<std::unique_ptr<fruit>> fruits;,那你为什么不能简单地做for (const auto& a_fruit : fruits) ...? -
StoryTeller 是对的,你需要一个容器。您不能只迭代“所有水果”。
标签: c++ class loops inheritance superclass