☰
C++ this指针和空指针的具体使用
2026/10/4 3:29:07 网站建设 项目流程

每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码那么问题是:这—块代码是如何区分那个对象调用自己的呢?

C++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象

this指针是隐含每一个非静态成员函数内的—种指针
this指针不需要定义,直接使用即可

this指针的用途:

  • 当形参和成员变量同名时,可用this指针来区分
  • 在类的非静态成员函数中返回对象本身,可使用returnthis

一、this指针

1 this指针解决名称冲突

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#include <iostream>

usingnamespacestd;

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_区分

1

2

3

4

5

6

7

8

9

10

classPerson

{

public:

Person(intage)

{

m_Age = age;

}

intm_Age;

};

解决2:

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

1

2

3

4

5

6

7

8

9

10

11

12

classPerson

{

public:

//1 解决名称冲突

Person(intage)

{

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

this->age = age;

}

intage;

};

2 返回对象本身用*this

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

classPerson

{

public:

//1 解决名称冲突

Person(intage)

{

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

this->age = age;

}

//2 返回对象本身用*this

voidPersonAddAge(Person &p)

{

this->age += p.age;

}

intage;

};

//1 解决名称冲突

voidtest1()

{

Person p1(18);

cout <<"p1的年龄为="<< p1.age << endl;

//2 返回对象本身用*this

Person p2(10);

p2.PersonAddAge(p1);

cout <<"p2的年龄为="<< p2.age << endl;

}

现在想要年龄后面继续累加,出错

函数test1()是void无返回值型,调用完毕就不能再调用了

p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);
如果每次调用完毕,可以返回到p2,就可以继续再调用PersonAddAge(p1);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询