继承对象列表 - C ++

时间:2012-04-17 00:41:11

标签: c++ polymorphism

在我的程序中,我有一个包含许多继承类的Base类。我需要存储这些继承对象(或任何容器)的列表。我能想到的唯一方法是使用一个类型枚举的Base类列表,然后向下转换为继承类型。

不得不经常施放我的物品似乎只是试图将我的物品放在某个容器中而受到严厉惩罚。

还有其他选择吗?铸造没有看起来那么糟糕吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

通过虚函数使用多态,这就是它们的用途:

#include <algorithm>
#include <functional>
#include <iostream>
#include <list>

using namespace std;

class A {
public:
  virtual void print() {
    cout << "This is an A object" << endl;
  }
};

class B : public A {
public:
  virtual void print() {
    cout << "This is a B object" << endl;
  }
};

class C : public A {
public:
  virtual void print() {
    cout << "This is a C object" << endl;
  }
};

class D : public B {
  // empty
};

int main() {
  std::list<A*> objects;
  objects.push_back(new A());
  objects.push_back(new B());
  objects.push_back(new C());
  objects.push_back(new D());

  for_each(objects.begin(), objects.end(), mem_fun(&A::print));

  return 0;
}

// outputs:
// This is an A object
// This is a B object
// This is a C object
// This is a B object

答案 1 :(得分:1)

没有直接支持的方式来以编程方式获取基类的所有子类的列表。

您可以通过让每个子类&#34;宣布&#34;在您的代码中执行此操作。本身通过调用某个函数进行注册,并获得该函数来接受/存储所需的数据。

但是,如果您不断地将对象从基类转换为派生类,那么您可能没有充分利用多态性。