假设我有一个带有虚函数的类和一个以不同方式实现该虚函数的派生类。假设我还有一个用于存储派生类的基类向量。如果事先不知道派生类是什么,我将如何在向量中执行派生类的虚函数?说明问题的最少代码:
#include <iostream>
#include <vector>
class Foo {
public:
virtual void do_stuff (void) {
std::cout << "Foo\n";
}
};
class Bar: public Foo {
public:
void do_stuff (void) {
std::cout << "Bar\n";
}
};
int main (void) {
std::vector <Foo> foo_vector;
Bar bar;
foo_vector.resize (1);
foo_vector [0] = bar;
bar.do_stuff (); /* prints Bar */
foo_vector [0].do_stuff (); /* prints Foo; should print Bar */
return 0;
}
你不能。向量中的对象将是sliced-- 任何派生类实例数据都将被截断,因此调用该方法将是一个非常糟糕的主意。
另一方面,如果你有一个向量pointers到基类,然后您只需调用虚拟方法,并且将调用派生类版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)