假设我有一个名为Foo
的类和一个名为Bar
的类,它扩展了Foo
。
我通过指针将它们存储在矢量中:
class Foo {
void draw() {
// stuff
}
};
class Bar() : public Foo {
void draw() {
// stuff
}
}
vector<Foo*> someVector;
// put types of Foo and Bar in the vector
for (int i = 0; i < someVector.size(); i++) {
Foo &f = someVector[i];
// if it's of type bar it should
// use that draw method
f.draw();
}
现在它将始终使用Foo
的draw方法。但是,如果它是Bar类型的话,我怎么能让它使用Bar
的draw方法呢?
编辑: 感谢Joe Z,我知道现在可以通过虚拟完成。但是,如果它是'Bar'类型并且我想使用'Foo'的绘制方法呢?现在有了虚拟,它总是选择'Bar'方法。
答案 0 :(得分:4)
您需要使用virtual
方法。这告诉编译器使用多态调度(即在运行时查找正确的调用方法)。
class Foo {
virtual void draw() {
// stuff
}
};
class Bar : public Foo {
virtual void draw() {
// stuff
}
};
这看起来像是一个解释概念的合理教程:http://www.learncpp.com/cpp-tutorial/122-virtual-functions/