我只是在做一些東西,並寫了這個程序。我得到了以下輸出。我知道函數解析發生在運行時,而變量綁定發生在編譯時,但我不明白的是我得到的第一個輸出(this->n
)。任何人都可以向我解釋這個嗎?虛擬功能輸出?
# include <iostream>
# include <stdio.h>
# include <conio.h>
using namespace std;
class A
{
int n;
public:
virtual void Fun1(int no=10)
{
int n=no;
cout<<"A::Fun1() "<<n <<"\n";
}
};
class B :public A
{
int n;
public:
virtual void Fun1(int no=20)
{
int n=no;
cout<<"B::Fun1() " << this->n << "\n"; // WHY SO ? gives B::Fun1() 40
cout<<"B::Fun1() " << n << "\n";
}
};
int main()
{
B b;
A &a =b;
a.Fun1();
A a1=b;
a1.Fun1();
getch();
return 0;
}
我得到的輸出是
B::Fun1() 40
B::Fun1() 10
A::Fun1() 10
你的類的數據成員是未初始化的;你可以從他們那裏獲得價值。 – ildjarn 2012-02-16 16:52:04
您正在用'A a1 = b;'切片對象。這是預期的行爲。 – 2012-02-16 16:57:26