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

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

this指针的用途

  • 当形参和成员变量同名时,可用this指针来区分
class Person{public:Person(int age){this->age = age;}int age;
};
  • 在类的非静态成员函数中返回对象本身,可使用return *this;
class Person{public:Person(int age){this->age = age;}Person& PersonAddAge(Person &p){this->age += p.age ; return *this;}int age;
};
void test02(){Person p1(10);Person p2(10);//链式编程 p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);cout << p2.age << endl;}

类和对象——对象特性——this指针的用途相关推荐

  1. C++_类和对象_对象特性_This指针的用途_用来解决名称冲突_*this实现链式编程---C++语言工作笔记049

    然后我们来看c++中的,this的使用,其实,我们知道java中也有this,这个c++中的this和java中的this 差不多.都是用来指代,对象的本身. 还是用代码去看看吧,c++中的this, ...

  2. C++阶段03笔记02【类和对象(封装、对象的初始化和清理、对象模型和this指针、友元、运算符重载、继承、多态)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.内存分区模型 2.引用 3.函数提高 4.类和对象 4.1.封装 4.1.1.封装的意义 --实例1:设计圆类 --实例2: ...

  3. 定义一个基本的银行账户类。在基本账户类的基础上派生出1年期定期账户、2年期定期账户、3年期定期账户和5年期定期账户。定义一个n个基类指针组成的数组,随机生成n个各类派生类的对象。让每个指针指向一个派生

    定义一个基本的银行账户类.在基本账户类的基础上派生出1年期定期账户.2年期定期账户.3年期定期账户和5年期定期账户.定义一个n个基类指针组成的数组,随机生成n个各类派生类的对象.让每个指针指向一个派生 ...

  4. 类和对象的特性(C++谭浩强第三版笔记)

    0.0 从程序结构上看:   基于过程的程序中:围绕功能进行的,函数是构成程序的基本部分,程序面对的是一个个函数.   面向对象的程序中:除主函数外,其他函数基本上都出现在"类"中 ...

  5. 【C++学习】类和对象--对象特性(2)

    静态成员 静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员. 静态成员变量: 所有对象共享同一份数据 在编译阶段分配内存 类内声明,类外初始化 静态成员函数: 所有对象共享同一个 ...

  6. c++学习13 类与对象(二)c++对象模型和this指针和友元

    类和对象 c++对象模型和this指针 成员变量和成员函数分开存储 在c++中类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象 #include<iostream> us ...

  7. 「地表最强」C++核心编程(五)类和对象--对象初始化和清理

    环境: 编译器:CLion2021.3:操作系统:macOS Ventura 13.0.1 文章目录 一.构造函数和析构函数 1.1 构造函数 1.2 析构函数 1.3 示例 二.构造函数的分类及调用 ...

  8. python加上子类的特性_Python--面向对象三大特性

    一.面向对象三大特性 什么是类的继承? 类的继承跟现实生活中的父.子.孙子.重孙子.继承关系一样,父类又称为基类. python中类的继承分为:单继承和多继承 1.继承 1 class ParentC ...

  9. 每天学一点Scala之 伴生类和伴生对象

    1.  object 相当于class的单个实例,因此,在object里声明的变量都是静态变量,静态方法 2.  在object里声明的变量,都是全局变量,也就是类的公共属性,或者类似于java中父类 ...

最新文章

  1. 【重置版】Android studio高效开发的秘密
  2. JavaScript-client、offset、scroll、定时器
  3. 学了阿里P8级架构师的7+1+1落地项目,转疯了!
  4. java cache缓存_Redis缓存失效策略思考
  5. mediacodec编解码少帧问题
  6. 有人提到田英章欧体田字格范本,说两句。
  7. java网络通信技术示例:简单的聊天小程序
  8. matlab绘制折线图
  9. 在matlab中开根号,请问,在matlab里面如果输入开方号(根号)?如9的开方怎么写?...
  10. Android中添加商品的购物车
  11. 2D Pixel Perfect:使用Unity创建任天堂红白机风格复古游戏
  12. Java多线程(超详解)
  13. 大四狗:我的java历程(续)
  14. 开源的调色板软件:焰火十二卷(Rickrack)
  15. 5000词学英语——DAY10
  16. 计算机网络技术的就业规划,计算机网络技术职业生涯规划书前言
  17. qDebug()用法
  18. 区块链技术创新应用势在必行 食品药品开启全链条溯源时代
  19. 三分钟教你学Git(二十七) - 修改多个commit
  20. C语言中如何转换汉中,行走,从汉中到刺桐

热门文章

  1. Deming管理系列(2)——怎样开发度量能力
  2. 【概率论系列学习】泊松分布和指数分布的关系
  3. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(四)地图导航控件模块...
  4. 开博拉~~~庆祝一下,哈~~~
  5. 《BI那点儿事》Microsoft 决策树算法——找出三国武将特性分布,献给广大的三国爱好者们...
  6. string.Equals 比较2个字符串是否相同忽略大小写
  7. android蓝牙打印机
  8. Stream 和Byte[] 之间的转换
  9. CodeSmith输错license后的解决办法
  10. Win32 像素格式描述符学习