How to store objects of multiple subclasses in a vector in C++
本问题已经有最佳答案,请猛点这里访问。
我正在尝试创建任何ITerable来存储子类对象。
我目前正在使用指向超类的指针向量,但这似乎不允许使用任何子类特定的声明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class piece { public: int foo() { return 1; } }; class pawn : public piece { public: int foo() { return 2; } }; std::vector<piece*> pieces; pieces.push_back(new pawn()); pieces[0]->foo(); // returns 1 though pieces[0] should be a pawn |
对pieces[0]->foo()的调用在我希望返回2时返回1。
调试显示"new pawn()"创建了一个工件指针,所以我知道为什么它不使用Pawn函数,但我不知道为什么它一开始不是Pawn。
这是因为您的
在这种情况下,由于您有一个
piece 中的virtual int foo() ;virtual int foo() override 在pawn 中。
参见"为什么我们需要C++中的虚拟函数?".