簡體   English   中英

輸出C ++虛函數

[英]output for C++ virtual function

我對以下代碼的輸出感到很困惑。 輸出是

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

Fun函數在任何基類中都不是虛擬的。 在函數Call所有編譯器都知道是A::Fun函數,它不知道C類。 它只知道你有一個B對象的引用,並且沒有B::Fun所以它在父類中查找並找到A::Fun函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM