一、C 类中的 this 指针
1、C 类中的 this 指针引入
在 C 类中 , this 指针 是一个特殊的指针 , 由系统自动生成 , 不需要手动声明定义 , 在类中的每个 非静态成员函数 中 , 都可以调用 this 指针 ;
this 指针 是指向 调用对象 自身 的指针 , 也就是调用 该成员函数 的 实例对象 的 内存地址 ;
由于 this 指针只能在 非静态成员函数内部使用 , 因此 this 指针是类内部使用的指针 , 使用 this 可以访问 实例对象 中 的所有 公有 public / 保护 protected / 私有 private 成员 ;
2、C 类中的 this 指针用法
C 类中的 this 指针用法 :
- 使用 this 作为指针 : 在 非静态成员函数 中 , 直接使用 this 作为 本实例对象 的指针 ;
this
- 使用 this-> 访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ;
this->成员变量名
- *使用 (this). 访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ; 先获取指针指向的数据 然后访问数据中的成员变量 ;
(*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
请按任意键继续. . .