迭代不同的对象

时间:2017-05-02 18:00:52

标签: c++ class loops inheritance superclass

我想迭代不同的对象,这些对象都来自同一个超类。这意味着我有一个像这样的超类:

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
}

但是我应该怎么做,因为苹果和香蕉是不同的类类型,但它们共享相同的超类。这就是为什么我认为必须有一种优雅的方式来实现它。

1 个答案:

答案 0 :(得分:1)

C ++没有任何类型的内置对象注册表,您可以在其中访问特定类型的每个现有对象。但是,C ++有多种container类型,可用于在各种不同的数据结构中存储多个对象。

由于您存储的对象具有不同的类型,但具有共同的基本类型,you need to use pointers or references以实现多态行为并避免object slicing

例如,您可以使用std::unique_ptr个对象的矢量。

std::vector<std::unique_ptr<fruit>> fruits;

fruits.emplace_back(new apple);
fruits.emplace_back(new banana);

for (auto &fruit : fruits) {
    // fruit is a reference to the unique_ptr holding the pointer-to-fruit. Use
    // the "indirect access to member" operator -> to access members of the
    // pointed-to object:

    fruit->some_method();
}

使用此方法(unique_ptr对象的向量)的优点是,当向量为时,您的苹果和香蕉对象会自动销毁。否则,您必须手动delete,这是一种非常容易出错的方法。