[C ++の基礎知識]このポインタ

まず、次のサンプルコードをお読みください。

class Date
{
    
     
public :
	 void Display ()
 	{
    
    
		cout <<_year<< "-" <<_month << "-"<< _day <<endl;
	}
 
 void SetDate(int year , int month , int day)
 {
    
    
  	 _year = year;
  	 _month = month;
	 _day = day;
 }
private :
     int _year ; // 年
     int _month ; // 月
     int _day ; // 日
};
int main()
{
    
    
	 Date d1, d2;
 	 d1.SetDate(2021,3,19);
	 d2.SetDate(2020,3,19);
	 d1.Display();
	 d2.Display();
	 return 0; 
}

考えてみてください:Dateクラスには2つのメンバー関数SetDateとDisplayがあります。関数本体の異なるオブジェクトの区別はありません。s1がSetDate関数を呼び出すと、関数
はどのようにしてs1オブジェクトの代わりにs1オブジェクトを設定する必要があるかを認識します。 s2オブジェクト?

C ++は、このポインターを導入することでこの問題を解決します。つまり、C ++コンパイラーは、各「非静的メンバー関数」に非表示のポインターパラメーターを追加して、ポインターが現在のオブジェクト(関数のときに関数を呼び出すオブジェクト)を指すようにします。が実行中)、関数本体のすべてのメンバー変数操作は、このポインターを介してアクセスされます。すべての操作がユーザーに対して透過的であるというだけです。つまり、ユーザーはそれを渡す必要がなく、コンパイラーが自動的に完了します。

アイコン:
ここに画像の説明を挿入

このポインタの性質:

  1. このポインタのタイプ:クラスタイプ* const
  2. 「メンバー関数」内でのみ使用できます
  3. thisポインタは、実際にはメンバー関数の仮パラメータです。オブジェクトがメンバー関数を呼び出すと、オブジェクトアドレスが実際の
    パラメータとしてthisパラメータに渡されます。したがって、このポインタはオブジェクトに格納されません。
  4. このポインターは、暗黙の関数ポインターパラメーターの最初のメンバーであり、通常、コンパイラーによってecxレジスターを自動的に通過します。ユーザーは、
    渡す必要はありません。

おすすめ

転載: blog.csdn.net/weixin_43962381/article/details/113835495