目次
1. このポインタの概念
1. それは何ですか?
これは、クラス内の非静的メンバー関数の暗黙的な仮パラメーターであり、 this ポインターは関数を呼び出すオブジェクトを指します。
this ポインターは、C++ コンパイラーによってデフォルトで各「非静的メンバー関数」に渡される隠しパラメーターであり、 this ポインターはメンバー関数を呼び出したオブジェクトを指します。
2. なぜこのポインターがあるのですか?
オブジェクト内のメンバー関数とメンバー変数にオブジェクト自体を認識させるにはどうすればよいでしょうか? ——this ポインタを介して: これはポインタであり、常にオブジェクト自体を指します。
3. 使い方は?
this ポインターはクラスのメンバー関数内でのみ呼び出すことができ、現在のオブジェクトのアドレスを表します。
次に、このポインタの特徴
1. このポインタの型: クラス * const の型。したがって、このポインタは const によって変更され、変更できません。
2. this ポインタは暗黙的であり、「メンバー関数」内でのみ使用できます。
3. this ポインタは本質的に「メンバ関数」の仮パラメータであり、オブジェクトがメンバ関数を呼び出すとき、オブジェクトのアドレスが実パラメータとしてこの仮パラメータに渡されます。したがって、this ポインタはオブジェクトに格納されません。つまり、this ポインタはオブジェクト自体の一部ではなく、sizeof(object) の結果には影響しません。
4. メンバー関数は実際には this ポインター パラメーターを隠します。このパラメーターはデフォルトでコンパイラーによって渡されるため、私たちが渡す必要はありません。
例: 実際のメンバー関数とメンバー関数呼び出し。
たとえば、このポインタはコンパイラによって渡されます。
3. this ポインタはどこにありますか?
this ポインタは通常、他の仮パラメータと同様にスタックに格納されます。これはオブジェクト内にないため、クラスのサイズを計算するときに this ポインターは計算されません。
4. this ポインタを空にすることはできますか?
はい、たとえば、 nullptr を使用してオブジェクトをインスタンス化する場合、 this ポインタは空であり、空のアドレスを指します。
ただし、この方法では、this ポインタが空のアドレスを指しているため、this ポインタを使用してクラスのメンバを呼び出すことはできず、クラスのメンバを強制的に呼び出すとエラーが報告されます。
5. this ポインターはコンストラクターで使用できますか?
なぜこの質問をするのですか?
コンストラクターを使用するときは、オブジェクトを構築して空間を開くため、this ポインターはオブジェクトの空間を指すため、どちらが先に来るかという問題があります。this ポインターが最初にオブジェクト空間を取得する場合、オブジェクトがまだ構築されていない場合は、エラーが発生します。
はい、簡単に覚えられます。コンストラクターはメンバー関数でもあるため、使用できます。
コンストラクターには 2 つのステップがあるため: 1. オブジェクトを構築してスペースを空ける; 2. 関数本体を入力した後: 値を割り当てる。したがって、コンストラクターが this ポインターを使用するとき、スペースはすでに開かれているため、コンストラクターで this ポインターを使用できます。