【C++】C++ 类中的 this 指针用法 ① ( C++ 类中的 this 指针引入 | this 指针用法 | 代码示例 )

2023-10-15 17:18:11 浏览数 (1)

一、C 类中的 this 指针

1、C 类中的 this 指针引入

在 C 类中 , this 指针 是一个特殊的指针 , 由系统自动生成 , 不需要手动声明定义 , 在类中的每个 非静态成员函数 中 , 都可以调用 this 指针 ;

this 指针 是指向 调用对象 自身 的指针 , 也就是调用 该成员函数 的 实例对象 的 内存地址 ;

由于 this 指针只能在 非静态成员函数内部使用 , 因此 this 指针是类内部使用的指针 , 使用 this 可以访问 实例对象 中 的所有 公有 public / 保护 protected / 私有 private 成员 ;

2、C 类中的 this 指针用法

C 类中的 this 指针用法 :

  • 使用 this 作为指针 : 在 非静态成员函数 中 , 直接使用 this 作为 本实例对象 的指针 ;
代码语言:javascript复制
this
  • 使用 this-> 访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ;
代码语言:javascript复制
this->成员变量名
  • *使用 (this). 访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ; 先获取指针指向的数据 然后访问数据中的成员变量 ;
代码语言:javascript复制
(*this).成员变量名

在 C 类中 , 定义了 成员变量 age 和 height , 在 构造函数 中进行初始化 , 可以使用 this-> age 访问 age 成员变量 , 使用 this->height 访问 height 成员变量 ;

在下面的代码中 , 参数名称也是 age 和 height , 与 成员变量名称重名了 , 使用 this 指针可以有效区分 函数参数 与 成员变量 重名的问题 ;

使用 代码 this->age = age; 为 age 变量赋值 , this->age 是成员变量 , age 是函数的参数 ;

示例代码 :

代码语言:javascript复制
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) 的 参数名为 age 和 height ,

成员变量为 int age 和 int height ,

代码语言:javascript复制
public:
	int age;		// 年龄
	int height;		// 身高

正好 , 成员变量名称 与 参数名相同 , 这里使用 this 关键字 , 可以解决名称冲突的问题 ;

代码示例 :

代码语言:javascript复制
#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;
}

执行结果 :

代码语言:javascript复制
执行 Student 的构造函数
s.age18 , s.height180
age: 18
this->age: 18
(*this).age: 18
请按任意键继续. . .

0 人点赞