C ++虚函数

时间:2017-06-25 15:42:27

标签: c++ polymorphism

我对以下代码的输出感到很困惑。输出是

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;
}

1 个答案:

答案 0 :(得分:3)

Fun函数在任何基类中都不是虚拟的。在函数Call中,所有编译器都知道A::Fun函数,它不知道C类。它只知道你有一个B对象的引用,并且没有B::Fun所以它在父类中查找并找到A::Fun函数。