【C++ | this指针】一文了解C++的this指针

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰:

本文未经允许,不得转发!!!


在这里插入图片描述

🎄一、为什么需要 this 指针

用下面这个例子说明一下,为什么需要 this 指针。

我们写一个CDate类,在类里面定义一个成员函数BigYear(),负责比较两个CDate对象,并返回年份较大的对象。

class CDate
{
public:
	const CDate& BigYear(const CDate& date)
	{
		if(date.m_year > m_year)
			return date;	// 参数对象
		else
			return ????;	// 调用对象
	}

private:
	int m_year;
	int m_mon;
	int m_day;
};

上面代码中,BigYear成员函数会出现一个问题,假设我们定义了两个CDate对象date_1date_2,并使用语句date_1.BigYear(date_2);来调用BigYear函数时,我们可以将参数对象(date_2的引用)作为返回值,但调用对象date_1却似乎没有办法返回,因为没有它的引用。

要解决这个问题,就需要使用C++的 this 指针。


在这里插入图片描述

🎄二、什么是 this 指针

this 指针指向用来调用成员函数的对象 ( this 被作为隐藏参数传递给类的成员函数)。

一般来说, 所有的类的成员函数( 包括构造函数和析构函数 ) 都有一个 this 指针。this 指针指向调用对象。如果成员函数需要引用整个调用对象,则可以使用表达式*this

this 指针的值不能被修改,this 指针指向的内容可以被修改,所以,BigYear 的函数头可能是下面代码的样子,只是这个this参数是我们看不见的,但可以直接使用:

const CDate& BigYear(CDate* const this, const CDate& date);

也就是说,在类的所有成员函数,都可以直接使用 this 这个名称,它指向调用该成员函数的对象,下面就使用代码来证明这一点:
1、我们使用this指针完善了 BigYear 成员函数;
2、新增printThisObject成员函数,把调用对象指针作为参数,与tish指针的值一起打印对比,会发现是一样的,说this指针就是指向当前调用对象。
3、返回引用的函数是左值的,意味着这些函数返回的是对象本身而非对象的副本。

// g++ 10_this_Date.cpp
#include <iostream>

using namespace std;

class CDate
{
public:
	CDate(int year, int mon, int day);	// 构造函数声明
	~CDate();							// 析构函数声明

	void show()
	{
		cout << "Date: " << m_year << "." << m_mon << "." << m_day << endl;
	}
	
	const CDate& BigYear(const CDate& date)
	{
		if(date.m_year > m_year)
			return date;
		else
			return (*this);
	}
	
	void printThisObject(const CDate* this_object)
	{
		cout << "this_object=" << this_object << ", this=" << this <<endl;
	}

private:
	int m_year;
	int m_mon;
	int m_day;
};

// 构造函数定义
CDate::CDate(int year, int mon, int day)
{
	m_year = year;
	m_mon = mon;
	m_day = day;
	cout << "Calling Constructor" << ", this=" << this <<endl;
}

// 析构函数定义
CDate::~CDate()
{
	cout << "Calling Destructor" << ", this=" << this <<endl;
}

int main()
{
	CDate date_1(2024,06,05);
	date_1.printThisObject(&date_1);
	
	cout << endl;
	
	CDate date_2(2025,06,05);
	date_2.printThisObject(&date_2);
	
	cout << endl;
	
	date_1.BigYear(date_2);
	
	return 0;
}

运行结果如下:
在这里插入图片描述


在这里插入图片描述

🎄三、使用 this 指针

在C++编程中,this指针在下面几个场景特别有用:

  1. 区分函数参数和数据成员:
    我们之前说明,成员函数参数最好不要跟数据成员名称一致,因为这样无法区分,而this指针可以帮助区分,看下面例子:

    class CDate
    {
    public:
    	CDate(int year, int mon, int day)
    	{
    		// year = year; // 会报错,无法区分成员和参数
    		this->year = year;
    		this->mon = mon;
    		this->day = day;
    	}
    
    private:
    	int year;
    	int mon;
    	int day;
    };
    
  2. 作为函数返回值

    const CDate& BigYear(const CDate& date)
    {
       ...
       return *this;
    }
    CDate* const BigYear()
    {
       ...
       return this;
    }
    
  3. 作为函数实参,这个就不举例的,就是将this*this 传给某个函数使用。

在这里插入图片描述

🎄四、总结

👉本文介绍了C++的this指针,为什么需要this指针,什么是this指针,怎么使用this指针。

this指针是所有类成员函数隐藏的一个函数参数:类名 * const this,不能显示地看到,但可以直接使用。
this指针指向当前成员函数的调用对象。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

相关推荐

  1. C++ this 指针

    2024-06-07 16:28:03       48 阅读
  2. [C++]this指针

    2024-06-07 16:28:03       29 阅读
  3. this指针

    2024-06-07 16:28:03       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 16:28:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 16:28:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 16:28:03       87 阅读
  4. Python语言-面向对象

    2024-06-07 16:28:03       96 阅读

热门阅读

  1. 【Webpack4打包机制原理解析】

    2024-06-07 16:28:03       25 阅读
  2. Codeforces Round 950 (Div. 3)

    2024-06-07 16:28:03       27 阅读
  3. 【讯为Linux驱动开发】3.内核空间和用户空间

    2024-06-07 16:28:03       26 阅读
  4. H1X三维轮廓扫描激光雷达在实现散料自动装车

    2024-06-07 16:28:03       27 阅读
  5. H3C运维工程师面经

    2024-06-07 16:28:03       31 阅读
  6. Python中zip函数的奥秘与运用

    2024-06-07 16:28:03       23 阅读