超类的STL迭代器调用子类方法

时间:2014-07-23 19:16:02

标签: c++ stl polymorphism

我有一段时间没有使用过C ++,所以我不确定我正在尝试做什么是正确的方法。我有以下课程:

class A {
public:
   virtual string printStuff() { return "A"; };
};

class B : public A {
public:
   string printStuff() { return "B"; };
};

class C : public A {
public:
   string printStuff() { return "C"; };
};

我有一个STL载体:

vector<A> vec;

它包含很多A类和B类对象。当我这样做时:

for (vector<A>::iterator iter = vec.begin(); iter != vec.end(); ++iter) {
   iter->printStuff();
}

所有打印的都是“A”。我希望它使用B类和C类的方法。

谢谢。

1 个答案:

答案 0 :(得分:4)

std::vector<A>只能 包含A类型的对象。如果插入派生类类型的对象,它将被切片。如果您需要多态行为,请使用std::vector<A*>(或更好,std::vector<std::unique_ptr<A>>)。