我有一段时间没有使用过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类的方法。
谢谢。
答案 0 :(得分:4)
std::vector<A>
只能 包含A
类型的对象。如果插入派生类类型的对象,它将被切片。如果您需要多态行为,请使用std::vector<A*>
(或更好,std::vector<std::unique_ptr<A>>
)。