如何使用基类的所有派生类填充向量/列表

时间:2011-03-31 01:05:00

标签: c++

我想获得一个派生类指针的向量/列表(一个对应于抽象基类中的每个派生类),例如给定基类名称。

2 个答案:

答案 0 :(得分:1)

所以要做到你想要做的事情

#include <list>

class BaseObject { };

class Dinosaur : public BaseObject { };

class Hammer : public BaseObject { };

void
myFunction() {
  std::list<BaseObject*> myList;
  myList.push_back(new Dinosaur());
  myList.push_back(new Hammer());
}

请注意,列表中的对象在销毁列表时不会自由释放。您必须手动完成(迭代列表并调用 delete ),如果您是C ++初学者, auto_ptr ,以及魔术世界,请查看有点复杂的内容智能指针^^

答案 1 :(得分:1)

你无法获得指向类的指针。类只是对象的规范。只有在通过实例化类创建对象时才能指向某些东西。

如果您有以下课程:

class FooBase {};
class DerivedFoo : public FooBase {};
class MoreDerivedFoo : public DerivedFoo {};

然后,您可以创建MoreDerivedFoo类型的对象,并使用任何类型的指针指向它。

MoreDerivedFoo mdf = new MoreDerivedFoo();
FooBase* p1 = &mdf;
DerivedFoo* p2 = &mdf;
MoreDerivedFoo* p3 = &mdf;

显然,每个指针都包含相同的内存地址。