下面是一个示例程序是什么我谈论:C++ - 呼儿方法将覆盖在家长的名单
#include <iostream>
#include <list>
using namespace std;
class Thing {
public:
virtual void jump() { cout << "Called from Thing class" << endl; }
};
class Car: public Thing {
public:
virtual void jump() { cout << "Vroom vroom; imma car biotch" << endl; }
};
int main(int argc, char* argv[]) {
Car myCar;
list<Thing> myList;
myList.push_back(myCar);
std::list<Thing>::iterator iterator;
for (iterator = myList.begin(); iterator != myList.end(); ++iterator) {
iterator->jump();
}
return 0;
}
输出:
Called from Thing class
我想要什么要做的是列出“事情”。我希望能够从Thing类中添加子类的实例;那么我希望能够从迭代器中调用它们的覆盖函数。
唯一的问题是,即使在使用“虚拟”关键字时,迭代器也会使用Thing :: jump函数,而不是Car :: jump函数。
我该怎么做才能使它不仅适用于Car,而且还包括Thing,Car等所有覆盖“跳转”功能的潜在子类。
多态性需要一个指针或引用的位置。你正在做的是切分你的派生对象,以便它变成简单的基础类型对象。 –
术语检查:它是“覆盖”和“重写”。 – molbdnilo