参照コード:
#include <vector>
#include <iostream>
class Func {
public:
virtual void call() {
std::cout<< "Func -> call()" << std::endl;
}
};
class Foo : public Func {
public:
void call() {
std::cout<< "Foo -> call()" << std::endl;
}
};
class Bar : public Func {
public:
void call() {
std::cout<< "Bar -> call()" << std::endl;
}
};
int main(int argc, char** argv) {
std::vector<Func> functors;
functors.push_back( Func() );
functors.push_back( Foo() );
functors.push_back( Bar() );
std::vector<Func>::iterator iter;
for (iter = functors.begin(); iter != functors.end(); ++iter)
(*iter).call();
}
そのコードを実行すると、コンピューターで次の出力が生成されます。
$ ./test
Func -> call()
Func -> call()
Func -> call()
このインスタンスで正しい仮想関数が呼び出されるようにする方法はありますか? 私はC++が初めてですが、私の最善の推測は次のとおりです。
(*iter).call();
オブジェクトにキャストされていFunc
ます。これは正しいです?