C++(10)—类和对象(上) ③this指针的详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、this指针详解
- 二、this指针注意事项
- 1.*this
- 2.使用场景
- 总结
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、this指针详解
在C+++中,this
指针是一个隐式指针,它指向当前对象的地址。this
指针在类的非静态成员函数中可用,用于访问当前对象的成员变量和成员函数。this
指针允许成员函数访问和修改它们所属对象的状态。
this
指针的特点:
-
隐式可用:在类的成员函数内部,不需要显式声明
this
指针,它会自动可用。 -
指向当前对象:
this
指针指向调用成员函数的那个对象。 -
常量:
this
指针是一个右值,不能被赋值,即不能改变它指向的对象。 -
类型:
this
指针的类型是ClassName*
,其中ClassName
是包含该成员函数的类名。
• Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调⽤Init和
Print函数时,该函数是如何知道应该访问的是d1对象还是d2对象呢?那么这⾥就要看到C++给了
⼀个隐含的this指针解决这⾥的问题
• 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this
指针。⽐如Date类的Init的真实原型为, void Init(Date* const this, int year,
int month, int day)
• 类的成员函数中访问成员变量,本质都是通过this指针访问的,如Init函数中给_year赋值, this-
>_year = year;
• C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显⽰使⽤this指针。
#include<iostream>
using namespace std;
class Date
{
public:
// void Init(Date* const this, int year, int month, int day)
void Init(int year, int month, int day)
{
// 编译报错:error C2106: “=”: 左操作数必须为左值
// this = nullptr;
// this->_year = year;
_year = year;
this->_month = month;
this->_day = day;
}
void Print()
#include<iostream>
using namespace std;
class Date
{
public:
// void Init(Date* const this, int year, int month, int day)
void Init(int year, int month, int day)
{
// 编译报错:error C2106: “=”: 左操作数必须为左值
// this = nullptr;
// this->_year = year;
_year = year;
this->_month = month;
this->_day = day;
}
void Print()
1
二、this指针注意事项
1.*this
this:this指针是一个指向调用对象的指针
void Init(Date* const this, int year, int month, int day)
2.使用场景
-
区分成员变量和函数参数:当成员函数的参数名与成员变量名相同时,可以使用
this
指针来区分它们。class MyClass { public: int value; void setValue(int value) { this->value = value; // 使用 this 指针区分成员变量和参数 } };
-
返回对象自身:在成员函数中,可以使用
this
指针返回对象自身,这在链式调用中非常有用。class MyClass { public: MyClass* doSomething() { // 执行一些操作 return this; // 返回对象自身,允许链式调用 } };
-
在构造函数和析构函数中:
this
指针在构造函数和析构函数中特别有用,因为它们需要访问和初始化对象的状态。class MyClass { public: MyClass() { this->initialize(); // 初始化对象 } ~MyClass() { this->cleanup(); // 清理对象 } private: void initialize() { // 初始化代码 } void cleanup() { // 清理代码 } };
总结
注意事项:
-
this
指针只在类的成员函数中有效,不能在静态成员函数中使用,因为静态成员函数不与特定的对象实例关联。 -
在多态的情况下,
this
指针指向的是实际对象的类型,而不是指针的静态类型。这使得this
指针在实现多态行为时非常有用。 -
this
指针是一个常量指针,不能被修改,这意味着你不能通过this
指针改变它所指向的对象。
this
指针是C++中实现面向对象编程的一个重要特性,它提供了一种方便的方式来访问和操作当前对象的状态。