仮想関数を持つ空のクラスがあるとしましょう:
class Base
{
public:
virtual void Foo(){std::cout << "this is the base class";}
}
次に、継承しBase
てオーバーライドするクラスがありますFoo()
。
class Derived : public Base
{
public:
void Foo(){std::cout << "this is the derived class";}
}
次に、次のリストを含む他のクラスがありますBase
。
class OtherClass
{
public:
std::vector<Base> listOfBases; //note it's not std::list<Derived>
}
クラスではなく、クラスを循環してlistOfBases
呼び出すFoo()
にはどうすればよいですか? 今私が言うなら、これは基本クラスが印刷されますが、クラスからオーバーライドされたものを印刷したいと思います。Derived
Base
listOfBases[i].Foo();
Derived
Derived
の代わりにのリストにするだけでBase
修正できますが、これらの継承されたクラスをあらゆる種類のものと呼ぶので、 のリストが必要ですBase
。
では、基本クラスのリストからオーバーライドされた関数を呼び出すにはどうすればよいでしょうか?