【C++学习笔记(十三)】之this指针的初解读与使用

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 问题

       非内联成员函数只会产生一份函数实例,也就是说多个类对象公用一份函数代码,那么这块函数代码如何区分到底是哪个类对象调用的自己呢?
       用this指针来区分类对象。

二. this指针介绍

(一)定义

       this指针,指向被调用的成员函数所属的对象。

       啥意思呢?

(二)举例

       假设Person是一个类,func()是非静态成员函数

Person p1;
p1.func();

       func()是被调用的成员函数,是由p1这个类对象调用的,因此,this指针便指向了Person p1这个类对象。即

 *this = p1;

*       当调用p1调用func()时,其实编译器在func()中隐含地添加了参数func(Person this), 意思就是将p1这个类对象当参数传了进去,因此,成员函数func()就能够区分出来是p1调用了它。

(三)总结

       this指针是隐含在类对象内的一种指针, 当类对象被创建后,它的非静态成员函数都隐含有指针this,指向的是这个类对象的地址。this指针是隐含的,不是类对象的一部分,不占类对象的空间。
       那为什么静态成员函数没有this指针呢?这还得从静态成员函数的性质说起,静态成员函数是整个类共享的,并不属于某一个类对象,因此不需要区分类对象。而this指针的作用是为了区分每个类对象,提供类对象的地址,从这里可以看出,静态成员函数是不需要this指针的。

三. this指针的使用

       那么,什么时候用this指针呢?

  1. 当传入的参数和类对象的参数命名冲突时,我们就可以用this->来区分两种同名参数。
  2. 当要返回类对象或类的参数时,用this->来返回。

四. 空指针访问成员函数的注意事项

       注意:若用空指针访问成员函数时,参数中隐含着this指针,此时的this指针为空指针NULL,,当该成员函数中没有用到this指针时,是可以正常地输出的,如下面代码中的”text函数,若成员函数由用到this指针,则会报错,因为是空指针,如下面代码中的”num”成员函数。

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class Person
{
public:
	void text()
	{
		cout << “text” << endl;
	}
	void num()
	{
		cout << num << endl;
	}

	int num;
};
void test()
{
	Person *p = NULL;
}
int main()
{
	test();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值