我正在使用以下代码片段尝试多态性:
#include <iostream>
#include <vector>
using namespace std;
struct Foo {
virtual void f() {
cout << "f from Foo" << endl;
}
};
struct Bar : public Foo {
void f() {
cout << "f from Bar" << endl;
}
};
int main() {
Foo foo;
Bar bar;
vector<Foo> fooV;
fooV.push_back(foo);
fooV.push_back(bar);
for(auto it = fooV.begin(); it != fooV.end(); ++it)
it->f();
}
我预计由于f()
被覆盖,其中一个会打印“f from Foo”,另一个会打印“f from Bar”。但是,程序的输出是
f from Foo
f from Foo
我还应该注意,我还尝试将关键字添加override
到 in 的声明f()
中Bar
,因为我使用的是 C++11。它没有任何效果。