一个很简单的C代码:
#include <iostream> using namespace std; class Foo { public: void callPrint() { print(); } void print() { cout << "Foo" << endl; } }; class Bar : public Foo { public: void print() { cout << "Bar" << endl; } }; int main() { Bar b; b.callPrint(); return 0; }
这里的输出是“Foo”.而如果我使“Foo :: print()”虚拟,则输出将为“Bar”.我的问题是:
>当Foo :: print()是非虚拟的,为什么当一个Bar对象传递给Foo :: callPrint()时,它是否被调用,是否有类型(静态和动态)不匹配?
>当Foo:callPrint()为虚拟时,调用b.callPrint()不是通过引用或指针,而是Bar :: print()被调用.这不是所谓的多态性,那么如何解释这个行为,根据语言定义或编译器的实现?