继承对象列表 - C++

List of inherited objects - C++

本文关键字:C++ 列表 对象 继承      更新时间:2023-10-16

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

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

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

感谢您的帮助!

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

#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

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

您可以在代码中做到这一点,方法是让每个子类通过调用某个函数进行注册来"宣布"自己,并让该函数接受/存储所需的数据。

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