成员函数无论是否是静态都只有一份,需要通过this指针来帮助成员函数确定是哪个对象在调用他。This指针是成员函数的一个隐式形参,隐含在每一个非静态成员函数内,不需要声明定义,直接调用即可。我们不能显示地调用this指针。

This指针帮助我们来把对象当成一个整体来访问,而非直接访问对象的某个成员。

This指针指向被调用的成员函数所属的对象。This指针的本质其实是一个指针常量,即指针是一个常量指针。比如在使用类创建一个对象A时,this指针就会一直指向这个对象A,而不会指向其他地方。即在调用成员函数时会通过this指针将对象的地址隐式地传入成员函数。相当于以下结构:

This指针指向的对象不可以修改,但是可以通过解引用的方式,修改对象里的值,如下:

对象调用成员函数,成员函数中的成员属性前面会默认隐式的加上this ->,相当于隐式地加上对象名 ->。

在类的非静态成员函数中,可以通过返回*this来返回对象本身(因为this指向的就是对象)。哪个对象调用的成员函数,该成员函数里的this就指向的那个对象。

如这里,函数中的this指向的就是p1。这里返回的是一个引用,因此后续操作对象还是这个p1。如果去掉那个&返回的是一个值的话,则根据拷贝函数的定义,返回的过程其实是将p1重新拷贝赋值给了一个新的变量p1’。

当形参与成员属性同名时,可用this来区分。

当程序是这个样子时,编译器会将这三个age认作是同一个变量。也就是说调用这个构造函数时给这个age赋的值将无法传输给属性age。面对这种情况,要么改变属性的名称,要么写成这种形式:

同样,在类内部,每一个属性的前面其实也有this->,即this指针也帮助成员属性确定了是哪个对象在调用他。

C++类:this指针相关推荐

  1. C++走向远洋——39(指向学生类的指针)

    */* Copyright (c) 2016,烟台大学计算机与控制工程学院* All rights reserved.* 文件名:zhizhen.cpp* 作者:常轩* 微信公众号:Worldhell ...

  2. C++知识点杂记2——类成员指针、嵌套类和union

    一.类成员指针 1.概念 类成员指针指向的是类的非static成员,因为类的static成员是所有类对象共有,所以static成员的指针和普通指针没有区别 2.成员变量指针 示例 class test ...

  3. c++——结构与指针 类与指针

    //结构与指针 struct MyPoint {int x, y; }; //类与指针 class CMyButton {int x, y;char isType; public:void setBu ...

  4. 将派生类指针赋值给基类的指针

    除了可以将派生类对象赋值给基类对象(对象变量之间的赋值),还可以将派生类指针赋值给基类指针(对象指针之间的赋值).我们先来看一个多继承的例子,继承关系为: #include <iostream& ...

  5. 【c++手记】句柄类智能指针

    很多同学学习c++都会看的一本经典教材<Primer> 而在面向对象里面提及到一种概念-智能指针,而往往同学会出现以下的问题 [问题] 智能指针是不是一种指针? stl里面的智能指针是什么 ...

  6. C++ :学习(类、指针)

    C++ :学习 类 void指针 类 https://blog.csdn.net/keneyr/article/details/89364275 https://www.jianshu.com/p/a ...

  7. MFC中获取App,MainFrame,Doc和View类等指针的方法

    From: http://hi.baidu.com/wxnxs/item/156a68f5b3b4ed18e3e3bd03 MFC中获取App,MainFrame,Doc和View类等指针的方法 1  ...

  8. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

  9. c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解

    文章目录 静态多态.动态多态 虚函数 哪些函数类型不可以被定义成虚函数? 虚函数的访问方式 析构函数中的虚函数 虚函数表指针 vptr 多继承下的虚函数表 虚基类表指针 bptr 纯虚函数 抽象类 虚 ...

  10. C++类的对象和类的指针的区别、指针和引用的区别

    转自:https://blog.csdn.net/liulina603/article/details/47290963 #include <iostream> #include < ...

最新文章

  1. MSSQL2005外网IP的1433端口开启方法
  2. Tomcat7 配置 ssl
  3. 【机器学习入门到精通系列】不废话直入正题之单变量线性回归(另附单变量非线性代码)
  4. 布隆过滤器避免redis缓存穿透
  5. Android JNI简单实例(android 调用C/C++代码)
  6. spring的InitializingBean介绍
  7. 【Spring学习】ring的core模块应用详解
  8. 【2018.4.14】模拟赛之二-ssl2392 蚂蚁【图论】
  9. java中访问修饰符_Java中的非访问修饰符是什么?
  10. SpringBoot项目瘦身指南,大厂如何面试看出你的水平
  11. href=“javascript:void(0);”和href=void(change_code(this));
  12. 国科大操作系统思考题答案总结
  13. PG数据库表及表注释查询语句
  14. html5播放器硬件加速,视频对比:Mango的HTML 5硬件加速很强?
  15. 机器学习识别图片的基本原理
  16. 空间换时间,轻松提高性能100倍
  17. latex特殊字体咋打?+下标打在左边
  18. 脑机接口:互联网遥远的疆界
  19. java向微信公众号---发送模板和图文消息
  20. FPGA概念理解之:ZYNQ、PS、PL、APU、ARM、SOC、URAT、GPIO...

热门文章

  1. 【小白装系统】——U盘法简介
  2. 领导下发紧急且风险大的任务,如何处理?
  3. 概率论--概率及性质
  4. (105, b“Unclosed quotation mark after the character string ‘2020-07-01‘.DB-Lib error message 20018,
  5. 微信小程序开发入门(连载)—— 微信公众平台配置
  6. #### redis cluster mget 优化方案 ####
  7. Gauss消元法求解线性方程组的Matlab实现(列主元、全主元)
  8. 我的世界网易手服务器文件夹,Minecraft服务端新手搭建指南(Linux篇)
  9. word页眉、页脚、页码自动编号与分页符的关系
  10. 计算机组成原理复习(总结)