C++ 中this指针的用途
先说结论:
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指针的用途相关推荐
- 类和对象——对象特性——this指针的用途
在C++中成员变量和成员函数是分开存储的.每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码. 那么问题是:这一块代码是如何区分是哪个对象调用自己的呢? C++通过提供特 ...
- C++中 *(指针引用)与*(指针)的区别
转自:http://blog.sina.com.cn/s/blog_673ef8130100imsp.html 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调函数的形式参 ...
- C#中使用指针转换数据类型[C#/unsafe]
今日因为一个同事说起,在原来的旧系统中使用指针做数据转换很方便,比如要把浮点数转化为数组,也或者是字符串的相互转换:当然,大家都知道c#中实现指针只需要写入unsafe,编译选项把"允许不安 ...
- C++this指针的用途
this指针的用途: 1.当形参和成员变量同名时,可用this指针来区分. 2.在类的非静态成员函数中返回对象本身,可使用return *this 每一个非静态成员函数只会诞生一份函数实例,也就是说多 ...
- Windows中多指针输入技术的实现与应用(4多鼠标输入的底层实现)
Windows中多指针输入技术的实现与应用(4多鼠标输入的底层实现) 湖南大学 谢祁衡 2 多鼠标输入的底层实现 2.1 通过开发过滤式鼠标驱动的实现 此技术最先由M.Westergaard在[9]中 ...
- java unsafe获取指针_【实战Java高并发程序设计 1】Java中的指针:Unsafe类
是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...
- 【Smart_Point】C/C++ 中共享指针 shared_ptr
1. 共享指针 shared_ptr 目录 1. 共享指针 shared_ptr 1.1 共享指针解决的问题? 1.2 创建 shared_ptr 对象 1.3 分离关联的原始指针 1.4 自定义删除 ...
- 【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 ...
- 【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 ...
最新文章
- python time智能等待_python中等待怎么表示
- 网站使用QQ登录问题小结
- aix 查看目前java进程_问一个 AIX 的命令 ps -ef|grep java
- php5.6的apaches的dll_Windows 10下 搭建Apache2.4、php5.6、mysql5.6
- 【POJ 1200】Crazy Search(将字符映射为数字,将NC进制hash成10进制)
- 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码...
- LeetCode 174. 地下城游戏(DP)
- php同时删除两个列表数据库,PHP 处理 数据库多表,既能高效又能思路清晰如何处理的?...
- python包含多个元组的元组_如何在python中将多个”列出的”元组连接成一个元组?...
- bat 取得服务列表_解读浩泽净水2018业绩:稳定增长背后的服务深化和科技跃进...
- 轮播图高度自适应_干货!弘成教你写轮播图全自动适应封装代码
- 何时使用 Golang
- MySQL外键的三种关系
- Rust : channel、多线程与 CTP相关机制的模拟
- 使用git来管理微信小程序
- 【虚拟主播】刚刚,我用三行代码创建了一个虚拟主播
- X230 安装 EI Capitan 10.11.5 驱动篇
- tl wn322g linux驱动下载,tplink wn322g+驱动官方下载
- 如何把图片制作成GIF动图?GIF图是怎样合成的?
- Leetcode 1153 字符串转化
热门文章
- PyTorch 自动微分
- 数字汽车钥匙的安全性增强技术
- 图像零交叉点,视频生成,视频识别,视频摘要,视频浓缩
- Are you missing a call to unregisterReceiver()?
- Android intent 接受值的内容为空
- 微信小程序wx:for 的使用
- Simple NHibernate Architecture[from]
- Oracle分页存储过程
- Numpy 生成 Bool型数组、一维转多维数组reshape、多维转一维数组、替换数组元素、提取数组元素、数组交集、差集、过滤数组元素、二维数组反转行、交换数组维度
- 最全正則表達式汇总—想要的都有了