在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();
}