このポインタの間違いC ++クラスがnullの場合

コード:

1  クラスのテスト{
 2      公共3      静的 ボイド F1(){COUT << Y << ENDL;}
 4      ボイド F2(){COUT << Y << ENDL;}
 5      ボイド F3(){COUT << X << ENDL;}
 6      ボイド F4(INT P){COUT << P << ENDL;}
 7      int型のX;
8      静的 int型のy;
9  }。
10  int型のテスト:: Y = 1 11  のint main()の
 12  {
 13      試験* P = nullptr。
14     P-> F1();
15      P-> F2();
16      P-> F3();
17      P-> F4(5 )。
18      GETCHAR()。
19      リターン 0 ;
20 }

2.結果:

F1、F2、F4意志の呼び出しが成功し、f3のコールに失敗しました。

説明:

pがnullの場合、このポインタは、したがって、このクラスはnullです。あなたは非静的メンバ関数を呼び出すと、コンパイラは最初のパラメータとして、このポインタにデフォルト設定されます!

F1自体は静的メンバ関数は、静的メンバ変数yを呼び出して、あなたは、成功をこのポインタを必要としません。

f2は通常のメンバ関数である、あなたはまた、成功をこのポインタを必要としない、静的メンバ変数yを呼び出すことができます。

変数の通常のメンバーと呼ばれるf3は、その後、あなたはこのポインタを必要とするが、これはヌルである、それが呼び出すのと同じですcoutの<< nullで> X <<てendlを、これは明らかに間違っています!

F4、成功をこのポインタを必要としません。


二その他の関連知識:

1、スタティックメンバ関数のみ静的メンバ変数を呼び出すことができ、通常のメンバ関数は、静的メンバ変数と呼ぶことができます。

クラスの静的メンバ変数、外部クラスの初期化を宣言する2。

 

おすすめ

転載: www.cnblogs.com/FdWzy/p/12364934.html