参考代码:
#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
物体上。它是否正确?