服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++中关于this指针的入门介绍

C++中关于this指针的入门介绍

2023-02-24 15:41幻荼 C/C++

this 指针在C++类和对象中是个很方便实用的关键字,可以简化对象成员属性的调用,使代码表达的含义更加准确;在之前的学习中我们都可以判断变量所占内存空间大小,那么我们创建的类对象所占的内存空间怎么计算呢?想知道t

简介

C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参

数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成

 

特性

1. this指针的类型:类类型* const

2. 只能在“成员函数”的内部使用

3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this

形参。所以对象中不存储this指针。

4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

 

举例

class Data {
public:
	void Printf()
	{
		cout << _year <<" "<<" "<< _month <<" "<< _day << endl;
	}
	void Init(int year=2022,int month=5,int day=25)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Data d1,d2;
	d1.Init(2022,1,1);
	d1.Printf();
	d2.Init(2022,2,2);
	d2.Printf();
	return 0;
}

C++中关于this指针的入门介绍

这是一个简单的日期类,那么这里有一个问题,我们在使用打印函数Printf和初始化函数Init的时候,d1和d2调用的是同一个函数,那么编译器是怎么知道我是应该设置/打印d1还是d2呢?

这其实就使用了this指针

那么具体编译器是怎么做的呢?

void Printf(const* this)//编译器实际上处理的
	{
		cout << this->_year << " " << this->_month << " " << this->_day << endl;
	}
	void Printf()//我们看到的
	{
		cout << _year <<" "<<" "<< _month <<" "<< _day << endl;
	}
void Init(const* this,int year=2022,int month=5,int day=25)//编译器处理的
	{
		this->_year = year;
		this->_month = month;
		this->_day = day;
	}
	void Init(int year = 2022, int month = 5, int day = 25)//我们看到的
	{
		_year = year;
		_month = month;
		_day = day;
	}
d1.Init(2022,1,1);//我们看到的
	d1.Init(&d1,2022, 1, 1);//编译器实际上处理的

实际上编辑器取了d1和d2函数的地址,然后传递给了const*this,这样编译器就能自动打印和初始化相应的结构了。

 

注意

我们不能自己在传参处加const*this和&,这是编译器自己做的,我们不能抢了编译器的活,即使做了,编译也不会通过,但是里面我们可以加

void Printf(const* this)//错误
	{
		cout << _year <<" "<<" "<< _month <<" "<< _day << endl;
	}
void Printf()//可以运行,但是编译器默认都会加this->,所以我们可以不用加,加了也没事
	{
		cout <<this-> _year <<" "<<" "<< this->_month <<" "<< this->_day << endl;
	}

到此这篇关于C++中关于this指针的入门介绍的文章就介绍到这了,更多相关C++ this指针内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_62718027/article/details/124964421

延伸 · 阅读

精彩推荐
  • C/C++详解C++ 引用

    详解C++ 引用

    这篇文章主要介绍了C++ 引用的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    菜鸟教程10142021-09-15
  • C/C++C++ string格式化输出方式

    C++ string格式化输出方式

    今天小编就为大家分享一篇C++ string格式化输出方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    flyfish19867572021-08-09
  • C/C++linux根据pid获取进程名和获取进程pid(c语言获取pid)

    linux根据pid获取进程名和获取进程pid(c语言获取pid)

    status文件,第一行的Name即为进程名,C程序实现根据PID获取进程名和根据进程名获取PID,大家参考使用吧...

    C语言程序设计6782021-01-12
  • C/C++exit和atexit的区别详细解析

    exit和atexit的区别详细解析

    以下是对exit与atexit的区别进行了详细的分析介绍,需要的朋友可以过来参考下...

    C语言教程网6812020-12-26
  • C/C++C语言实现的猜数字小游戏

    C语言实现的猜数字小游戏

    这篇文章主要为大家详细介绍了C语言实现的猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    LI大大11302021-08-11
  • C/C++C语言数据结构实现银行模拟

    C语言数据结构实现银行模拟

    这篇文章主要介绍了C语言数据结构实现银行模拟的相关资料,通过此文希望大家能理解离散化的方法,希望能帮助到大家,需要的朋友可以参考下...

    杨鑫newlfe8192021-05-29
  • C/C++浅谈C++如何求等差素数列

    浅谈C++如何求等差素数列

    这篇文章主要介绍了浅谈C++如何求等差素数列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    AnranWu11682021-09-18
  • C/C++Qt绘制简单时钟

    Qt绘制简单时钟

    这篇文章主要为大家详细介绍了Qt绘制简单时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    (^0^)陌路8932021-09-10