先说结论:

1.形参和变量同名时,可用this指针来区分

2.在类的非静态成员函数中返回本身,可用return  *this

1.区分形参和变量同名时:

#include <iostream>
using namespace std;class Person
{
public:Person(int age){age = age;}int age;
};void test01()
{Person p1(18);cout << "年龄为: " << p1.age << endl;
}int main()
{test01();system("pause");return 0;
}

上述代码运行结果多少呢?             答案是-858993460  当然这个答案毫无意义

为什么呢  将上述代码中的age选中  然后会有下面这种情况  相信大家知道什么意思   就是编译器不会像人脑一样将左边的age看成类的属性age,所以就导致编译器认为上述3个age是一回事,所以再编译器中相当于Person类的属性age没有赋值,所以进行输出的时候就会用0xCCCCCCCC来进行填充,就有了输出是-858993460的答案

那怎么解决上述问题呢?如下图:

在第一个age前面加上this,什么意思呢看看官方解释:

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

大白话来讲就是谁调用这个类,this就指向谁,上述这个this指向的就是p1

当然这种错误的解决方法还有一种最简单的:在类中起属性名字的时候,尽量别和形参名取一样就好了

2.return *this返回函数本身

#include <iostream>
using namespace std;class Person
{
public:Person(int age){m_age = age;}Person& PersonAddAge(Person &p){this->m_age += p.m_age;return *this;}int m_age;
};void test02()
{Person p1(18);Person p2(18);p1.PersonAddAge(p2).PersonAddAge(p2).PersonAddAge(p2);  cout << p1.m_age << endl;
}int main()
{test02();system("pause");return 0;
}

下面的块代码中:这块代码中有两个点

1.返回值类型使用了Person的引用

2.return *this

Person& PersonAddAge(Person &p)
{this->m_age += p.m_age;return *this;
}

A1:为什么要使用Person&的返回值

return *this就是返回函数本身,但是得注意返回值类型,记得做引用传递!!!

C++ 中this指针的用途相关推荐

  1. 类和对象——对象特性——this指针的用途

    在C++中成员变量和成员函数是分开存储的.每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码. 那么问题是:这一块代码是如何区分是哪个对象调用自己的呢? C++通过提供特 ...

  2. C++中 *(指针引用)与*(指针)的区别

    转自:http://blog.sina.com.cn/s/blog_673ef8130100imsp.html 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调函数的形式参 ...

  3. C#中使用指针转换数据类型[C#/unsafe]

    今日因为一个同事说起,在原来的旧系统中使用指针做数据转换很方便,比如要把浮点数转化为数组,也或者是字符串的相互转换:当然,大家都知道c#中实现指针只需要写入unsafe,编译选项把"允许不安 ...

  4. C++this指针的用途

    this指针的用途: 1.当形参和成员变量同名时,可用this指针来区分. 2.在类的非静态成员函数中返回对象本身,可使用return *this 每一个非静态成员函数只会诞生一份函数实例,也就是说多 ...

  5. Windows中多指针输入技术的实现与应用(4多鼠标输入的底层实现)

    Windows中多指针输入技术的实现与应用(4多鼠标输入的底层实现) 湖南大学 谢祁衡 2 多鼠标输入的底层实现 2.1 通过开发过滤式鼠标驱动的实现 此技术最先由M.Westergaard在[9]中 ...

  6. java unsafe获取指针_【实战Java高并发程序设计 1】Java中的指针:Unsafe类

    是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...

  7. 【Smart_Point】C/C++ 中共享指针 shared_ptr

    1. 共享指针 shared_ptr 目录 1. 共享指针 shared_ptr 1.1 共享指针解决的问题? 1.2 创建 shared_ptr 对象 1.3 分离关联的原始指针 1.4 自定义删除 ...

  8. 【Smart_Point】C/C++ 中独占指针unique_ptr

    1. 独占指针unique_ptr 目录 1. 独占指针unique_ptr 1.1 unique_ptr含义 1.2 C++11特性 1.3 C++14特性 1.1 unique_ptr含义 uni ...

  9. 【Smart_Point】C/C++ 中智能指针

    C++11智能指针 目录 C++11智能指针 1.1 C++11智能指针介绍 1.2 为什么要使用智能指针 1.2.1 auto_ptr(C++98的方案,C++11已经抛弃)采用所有权模式. 1.2 ...

最新文章

  1. python time智能等待_python中等待怎么表示
  2. 网站使用QQ登录问题小结
  3. aix 查看目前java进程_问一个 AIX 的命令 ps -ef|grep java
  4. php5.6的apaches的dll_Windows 10下 搭建Apache2.4、php5.6、mysql5.6
  5. 【POJ 1200】Crazy Search(将字符映射为数字,将NC进制hash成10进制)
  6. 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码...
  7. LeetCode 174. 地下城游戏(DP)
  8. php同时删除两个列表数据库,PHP 处理 数据库多表,既能高效又能思路清晰如何处理的?...
  9. python包含多个元组的元组_如何在python中将多个”列出的”元组连接成一个元组?...
  10. bat 取得服务列表_解读浩泽净水2018业绩:稳定增长背后的服务深化和科技跃进...
  11. 轮播图高度自适应_干货!弘成教你写轮播图全自动适应封装代码
  12. 何时使用 Golang
  13. MySQL外键的三种关系
  14. Rust : channel、多线程与 CTP相关机制的模拟
  15. 使用git来管理微信小程序
  16. 【虚拟主播】刚刚,我用三行代码创建了一个虚拟主播
  17. X230 安装 EI Capitan 10.11.5 驱动篇
  18. tl wn322g linux驱动下载,tplink wn322g+驱动官方下载
  19. 如何把图片制作成GIF动图?GIF图是怎样合成的?
  20. Leetcode 1153 字符串转化

热门文章

  1. PyTorch 自动微分
  2. 数字汽车钥匙的安全性增强技术
  3. 图像零交叉点,视频生成,视频识别,视频摘要,视频浓缩
  4. Are you missing a call to unregisterReceiver()?
  5. Android intent 接受值的内容为空
  6. 微信小程序wx:for 的使用
  7. Simple NHibernate Architecture[from]
  8. Oracle分页存储过程
  9. Numpy 生成 Bool型数组、一维转多维数组reshape、多维转一维数组、替换数组元素、提取数组元素、数组交集、差集、过滤数组元素、二维数组反转行、交换数组维度
  10. 最全正則表達式汇总—想要的都有了