由于C++中成员变量和成员函数是分开存储的,所以每一个非静态成员函数只会诞生一份函数实例,就是多个同类型的对象会共用一块代码,如果需要让一块代码调用自己,可以用到this指针,this是C++提供的特殊的对象指针,不需要定义。

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

第一个用途:当形参和成员变量同名时,可以用this指针来区分

struct Member
{Member(int score){this->score=score; //this->成员变量 = 形参}int score;
};
int main()
{Member n1(5);cout<<n1.score<<endl;  //5
}

当然如果形参和成员变量名字不一样时,也可以不使用this指针

第二个用途:在类的非静态成员函数中返回对象本身,可使用return *this,用于链式编程

struct Member
{Member(int score){this->score=score;}Member& AddScore(Member& n) //这里如果不使用&的话,返回的虽然也是一个对象,但是这个对象不是n1了,是临时创建出来的对象{this->score+=n.score;return *this;}int score;
};
int main()
{Member n1(5);Member n2(100);Member n3(30);n1.AddScore(n2); //5+100=105n1.AddScore(n2).AddScore(n3);//105+100+30=235cout<<n1.score<<endl;  //235
}


由于AddScore()函数返回的是一个对象,对这个对象取引用,则这个对象也就是n1


struct Member
{Member(int score){this->score=score;}Member AddScore(Member& n) //这里没有使用引用,返回的虽然也是一个对象,但是这个对象不是n1了,是临时创建出来的对象{this->score+=n.score;return *this;}int score;
};
int main()
{Member n1(5);Member n2(100);Member n3(30);n1.AddScore(n2); //5+100=105n1.AddScore(n2).AddScore(n3);//105+100=205cout<<n1.score<<endl;  //205
}


由于AddScore()函数返回的是一个对象,但是没有引用,则这个对象也就不是n1了,而是临时创建出来的n1’,n1’中的AddScore()函数执行一次后返回的是n1’’

this指针的作用和用法相关推荐

  1. typedef的作用和用法(给结构体,函数指针,数组取别名)

    typedef的作用和用法 作用(typedef 能给int,double,float,char等数据类型取别名) typedef 还能给结构体取别名 typedef 还能给函数指针取别名 typed ...

  2. 函数指针的作用:*visit函数

    定义 函数指针是指向函数的指针变量. 因此"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C ...

  3. PreTranslateMessage作用和用法

    PreTranslateMessage作用和用法 PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗体的消息都要通过这里,比較经常使用,当 ...

  4. java package作用_java import、package作用与用法

    java import.package作用与用法 有些人写了一阵子Java,可是对於Java 的package 跟import 还是不太了解很多人以為原始码 .java 档案中的import 会让编译 ...

  5. MySQL数据类型中DECIMAL的作用和用法

    在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来介绍一下MySQL数据类型中的DECIMAL类型的作用和用法. 一般赋予浮 ...

  6. php中pre标签,html中pre标签与code标签的作用与用法

    HTML 标签 定义和用法 pre 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. 标签的一个常见应用就是用来表示计算机的源代码. 可以导致 ...

  7. PHP中的常见魔术方法功能作用及用法实例

    这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...

  8. const修饰指针和引用的用法【转贴】

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  9. 、简述global关键字的作用_在C#编程中global关键字的作用及其用法

    在C#编程中,global 是 C# 2.0 中新增的关键字,理论上说,如果代码写得好的话,根本不需要用到它.今天就为大家展示下global关键字的作用及其用法,希望对大家学习C#编程有所帮助. 假设 ...

最新文章

  1. SQL Server Profiler工具
  2. R语言导入SPSS文件实战
  3. python 怎么将数组转为列表_图片转换成pdf格式怎么操作?什么软件能将图片转为pdf?...
  4. Spring Cloud Alibaba即将正式毕业,Netflix之后新生力量值得期待!
  5. 选购计算机性能的核心指标,选电脑主要看什么参数呢?买电脑主要看什么参数,有什么技术指标?...
  6. C++统计难题hdu1251
  7. 高级数据结构---并查集
  8. 判断输入的字符串是否为回文_刷题之路(九)--判断数字是否回文
  9. 真实教育场景手写/表格/公式OCR数据集
  10. 《TCP/IP路由技术(第二卷)》一1.5 检测与排除EGP故障
  11. java四方支付系统
  12. 前端毕业设计:Nodejs+Vue菜鸟驿站仓库管理系统的设计与实现
  13. 嵌入式课程 之 霍尔传感器(编码器)实验
  14. 超强PHP集成开发工具:phpDesigner v7.2.1 最新版下载(附注册机)
  15. xheditor 内容保存时 不转义html特殊字符,XHEditor使用文档(转载收藏)
  16. [label][WorldPress] 一个很方便查找定位WorldPress源代码位置的网址
  17. SSL/TLS部署最佳实践
  18. 阿里云七天训练营学习(4):服务器管理软件(putty、ccaa)
  19. 写一个PE的壳_Part 2:ASLR+修复输入表(IAT)+重定位表支持(.reloc)
  20. 原生js实现运维小姐姐的九宫格抽奖活动、心跳快了

热门文章

  1. 电流互感器matlab,电流互感器对高频信号传变的MATLAB仿真研究
  2. 【AGC】禁用华为签名问题
  3. 学习笔记:查看谷歌浏览器的登陆账号以及密码
  4. 【重温基础算法】内部排序之快速排序法
  5. 服务器支持的网上银行系统列表,兴业银行欢迎您
  6. 金山新剑网3白金新手卡,新剑网3钻…
  7. cartopy绘制中国降雨地图
  8. C语言课程设计:医院管理系统
  9. oppoR9m降级 root刷机 Magiskroot 解锁system文件夹
  10. VisualSVN Server版本推荐