C++学习之初识this指针

在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上,占用对象的空间;
还有一点:如果是一个空对象也会占用一个字节空间,如果是非空对象会按实际的数据来分配空间。
然后这时候就遇到一个问题:每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码,这一块代码是如何区分那个对象调用自己的呢?这时就用到了this指针。
this指针指向被调用的成员函数所属的对象,this指针不需要定义,直接使用即可
this指针的用途:

1、当形参和成员变量同名时,可用this指针来区分
2、 在类的非静态成员函数中返回对象本身,可使用return *this
3、注意空指针访问的问题

#include<iostream>
#include <string>
using namespace std;

class Person
{

public:
	
	Person(int age)//1、当形参和成员变量同名时,可用this指针来区分
	{
		this->age = age;
	}

	Person& Addperson(Person p)//2、在类的非静态成员函数中返回对象本身
	{
		this->age += p.age;
		return *this;
	}
/*	Person Addperson(Person p)//如果返回值不是引用返回,会只返回一个值,而不是对象本身,这样如果多次调用的话,编译器会复制多个值出来,修改的不是同一个值;
	{
		this->age += p.age;
		return *this;
	}*/



	//空指针访问:
	int showAge()
	{
	    if(this == NULL)//判断调用的对象是否为空指针
		{
			return;
		}
		cout << "年龄:" << age << endl;
	//	cout << "年龄:" << this->age << endl; //编译器默认会加上this指针,但是这时候this指针为空,无法访问,为了避免这一问题可以在访问之前判断一下
	}

public:
	int age;
};

void main()
{
	Person p1(10);
	
	Person p2(18);
	
    //链式编程,返回一个对象后,再次在此基础上操作
	p2.Addperson(p1).Addperson(p1).Addperson(p1);

	cout << "P2:" << p2.age<< endl;

   //空指针访问成员函数
	Person* p3 = NULL;
	p3->showAge();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值