次のコードスニペットを使用して、ポリモーフィズムを少し試しています。
#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」を出力し、もう一方は「ffromBar」を出力することを期待していました。ただし、プログラムの出力は
f from Foo
f from Foo
また、C ++ 11を使用しているため、 inoverride
の宣言にキーワードを追加しようとしたことにも注意してください。効果はありませんでした。f()
Bar