我对以下代码的输出感到很困惑。输出是
A::Fun
C::Do
有谁可以解释为什么会这样?任何帮助将不胜感激!
#include <iostream>
using namespace std;
class A {
private:
int nVal;
public:
void Fun()
{ cout << "A::Fun" << endl; }
void Do()
{ cout << "A::Do" << endl; }
};
class B:public A {
public:
virtual void Do()
{ cout << "B::Do" << endl; }
};
class C:public B {
public:
void Do( )
{ cout << "C::Do" <<endl; }
void Fun()
{ cout << "C::Fun" << endl; }
};
void Call(B & p) {
p.Fun(); p.Do();
}
int main() {
C c; Call(c);
return 0;
}
答案 0 :(得分:3)
Fun
函数在任何基类中都不是虚拟的。在函数Call
中,所有编译器都知道A::Fun
函数,它不知道C
类。它只知道你有一个B
对象的引用,并且没有B::Fun
所以它在父类中查找并找到A::Fun
函数。