调用子类方法的超类STL迭代器 我暂时没有使用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迭代器 我暂时没有使用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"; }; };,c++,stl,polymorphism,C++,Stl,Polymorphism,我有一个STL向量: vector<A> vec; vec; 它包含大量的a类和B类对象。当我这样做时: for (vector<A>::iterator iter = vec.begin(); iter != vec.end(); ++iter) { iter->printStuff(); } for(向量::迭代器iter=vec.begin();iter!=vec.end();++iter){ iter->printStuff(); } 它打印的

我有一个STL向量:

vector<A> vec;
vec;
它包含大量的a类和B类对象。当我这样做时:

for (vector<A>::iterator iter = vec.begin(); iter != vec.end(); ++iter) {
   iter->printStuff();
}
for(向量::迭代器iter=vec.begin();iter!=vec.end();++iter){
iter->printStuff();
}
它打印的都是“A”。我希望它使用B类和C类的方法


谢谢。

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

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

vector。您的向量包含一组切片到a的对象,多态性丢失(存储唯一的)向量。您的向量包含一组切片到a的对象,多态性丢失(存储唯一的)谢谢。使用UnQuyG-PTR的优点是什么?@ ScAluloHoRT,不可能用智能POTITIT泄漏内存或其他资源,就像我的C++不支持UNQuyYQPTR。有什么解决办法吗?@SquallLeohart如果你不能升级你的编译器,我想你只需要使用
A*
@SquallLeohart:你在使用什么编译器,你有没有
#包括
?谢谢。使用UnQuyG-PTR的优点是什么?@ ScAluloHoRT,不可能用智能POTITIT泄漏内存或其他资源,就像我的C++不支持UNQuyYQPTR。有什么解决办法吗?@SquallLeohart如果你不能升级你的编译器,我想你只需要使用
A*
@SquallLeohart:你在使用什么编译器,你有没有
#包括