0

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

仅仅试图将我的对象放在某个容器中,不得不不断地投射我的对象似乎是一种沉重的惩罚。

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

谢谢您的帮助!

4

2 回答 2

9

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

#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
于 2012-04-17T01:01:56.017 回答
1

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

您可以在代码中通过调用某个函数来注册每个子类来“宣布”自己,并让该函数接受/存储所需的数据。

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

于 2012-04-17T00:47:52.017 回答