1. C++ クラスのこのポインター
1. C++ クラスへのこのポインターの導入
C++ クラスでは、this ポインターは特別なポインターであり、システムによって自動的に生成され、手動で宣言および定義する必要はありません。このポインターは、クラス内のすべての非静的メンバー関数で呼び出すことができます。
this ポインタは、呼び出し元オブジェクト自体へのポインタであり、メンバ関数を呼び出すインスタンス オブジェクトのメモリ アドレスです。
このポインターは非静的メンバー関数内でのみ使用できるため、このポインターはクラスの内部で使用されるポインターであり、これを使用してインスタンス オブジェクト内のすべての public/protected/private メンバーにアクセスできます。
2. C++ クラスでのこのポインターの使用法
C++ クラスでのこのポインターの使用法:
- これをポインタとして使用する:非静的メンバー関数では、これをこのインスタンス オブジェクトのポインタとして直接使用します。
this
- メンバー変数にアクセスするには、this-> を使用します。非静的メンバー関数では、次の構文を直接使用して、このインスタンス オブジェクト内の非静的メンバー変数にアクセスします。
this->成员变量名
- * ( this) を使用します。メンバー変数にアクセスするには:非静的メンバー関数では、次の構文を直接使用して、このインスタンス オブジェクト内の非静的メンバー変数にアクセスします。まず、ポインターが指すデータを取得してから、データ内のメンバー変数。
(*this).成员变量名
C++ クラスでは、メンバー変数 age と height がコンストラクターで定義および初期化されます。this->age を使用して age メンバー変数にアクセスし、this->height を使用して height メンバー変数にアクセスできます。
次のコードでは、パラメーター名もメンバー変数と同じ名前の age と height になっていますが、このポインターを使用すると、関数パラメーターとメンバー変数が同じ名前を持つ問題を効果的に区別できます。
コード this->age = age; を使用して age 変数に値を割り当てます、this->age はメンバー変数、age は関数のパラメーターです。
サンプルコード:
class Student
{
public:
// 带参构造函数
Student(int age, int height)
{
this->age = age;
this->height = height;
cout << "执行 Student 的构造函数" << endl;
}
void print() {
// this 指针隐式传递
std::cout << "age: " << age << std::endl;
// 通过指针 访问成员变量
std::cout << "this->age: " << this->age << std::endl;
// 先获取指针指向的数据 然后访问数据中的成员变量
std::cout << "(*this).age: " << (*this).age << std::endl;
}
public:
int age; // 年龄
int height; // 身高
};
3. 完全なコード例
以下のコードでは、
コンストラクター Student(int age, int height) のパラメーターには、年齢と身長という名前が付けられます。
メンバー変数は int age と int height です。
public:
int age; // 年龄
int height; // 身高
たまたまメンバー変数名がパラメーター名と同じであるため、ここでは名前の競合の問題を解決するために this キーワードが使用されています。
コード例:
#include "iostream"
using namespace std;
class Student
{
public:
// 带参构造函数
Student(int age, int height)
{
this->age = age;
this->height = height;
cout << "执行 Student 的构造函数" << endl;
}
~Student()
{
cout << "执行 Student 的析构函数" << endl;
}
void print() {
// this 指针隐式传递
std::cout << "age: " << age << std::endl;
// 通过指针 访问成员变量
std::cout << "this->age: " << this->age << std::endl;
// 先获取指针指向的数据 然后访问数据中的成员变量
std::cout << "(*this).age: " << (*this).age << std::endl;
}
public:
int age; // 年龄
int height; // 身高
};
int main() {
// 调用有参构造函数 创建 Student 实例对象
Student s(18, 180);
cout<< "s.age" << s.age << " , s.height" << s.height << endl;
s.print();
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
の結果:
执行 Student 的构造函数
s.age18 , s.height180
age: 18
this->age: 18
(*this).age: 18
请按任意键继续. . .