[英]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.