
每一个非静态成员函数只会诞生一份函数实例也就是说多个同类型的对象会共用一块代码那么问题是:这—块代码是如何区分那个对象调用自己的呢?C通过提供特殊的对象指针,this指针解决上述问题。this指针指向被调用的成员函数所属的对象this指针是隐含每一个非静态成员函数内的—种指针this指针不需要定义直接使用即可this指针的用途:当形参和成员变量同名时可用this指针来区分在类的非静态成员函数中返回对象本身可使用returnthis一、this指针1 this指针解决名称冲突1234567891011121314151617181920212223#include iostreamusingnamespacestd;classPerson{public:Person(intage){age age;}intage;};//1 解决名称冲突voidtest1(){Person p1(18);cout p1的年龄为 p1.age endl;}intmain(){test1();return0;}输出年龄乱码分析光标放在形参age上发现三个age 都是灰色系统认为这个三个age 是同一数据解决1将成员变量和形参书写是上加m_区分12345678910classPerson{public:Person(intage){m_Age age;}intm_Age;};解决2this指针指向 被调用的成员函数 所属对象123456789101112classPerson{public://1 解决名称冲突Person(intage){//this指针指向 被调用的成员函数 所属对象this-age age;}intage;};2 返回对象本身用*this123456789101112131415161718192021222324252627282930classPerson{public://1 解决名称冲突Person(intage){//this指针指向 被调用的成员函数 所属对象this-age age;}//2 返回对象本身用*thisvoidPersonAddAge(Person p){this-age p.age;}intage;};//1 解决名称冲突voidtest1(){Person p1(18);cout p1的年龄为 p1.age endl;//2 返回对象本身用*thisPerson p2(10);p2.PersonAddAge(p1);cout p2的年龄为 p2.age endl;}现在想要年龄后面继续累加出错函数test1()是void无返回值型调用完毕就不能再调用了p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);如果每次调用完毕可以返回到p2就可以继续再调用PersonAddAge(p1);