【C++】C++クラスでのこのポインタの使い方①(C++クラスでのこのポインタの紹介|このポインタの使い方|コード例)





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
请按任意键继续. . .

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/han1202012/article/details/133252002