私はちょうど何かをしていて、このプログラムを書いていました。私は次の結果を得ました。コンパイル時に変数のバインディングが行われているのに、実行時に関数の解決が行われることはわかっていますが、理解できなかったのは最初の出力です(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;
}
出力はthis->n
あなたは初期化しませんメンバ変数B::n
、を意味し、第一の出力については
B::Fun1() 40
B::Fun1() 10
A::Fun1() 10
クラス・データ・メンバーが初期化されていないいます。あなたはそれらから_any_値を得ることができます。 – ildjarn
オブジェクトを 'A a1 = b;'でスライスしています。これは予想される動作です。 –