this 指针

引言:
首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。
注意:
this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对象类型,

一、this指针的概念

  1. 定义
    在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

  2. this只能在成员函数中使用
    成员函数默认第一个参数为T* const register this。
    (友元函数,全局函数不是成员函数)

  3. this指针不能再静态函数中使用
    静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用。

  4. this指针的创建
    this指针在成员函数的开始执行前构造的,在成员的执行结束后清除。

  5. this指针只有在成员函数中才有定义。
    创建一个对象后,不能通过对象使用this指针。也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。

二、this指针的操作

  1. 在类的非静态成员函数中返回类对象本身的时候,我们可以使用圆点运算符*,箭头运算符->。

    #include<iostream>
    using namespace std;
    class A{private:int x;public:A(){x=0;}void display(){cout<<this<<endl;cout<<this->x<<endl;cout<<x<<endl;cout<<(*this).x<<endl;}
    };
    int main(void){A a;a.display();
    }
    

    输出:

    0x70fe40
    0
    0
    0
  2. 实现级联

关于this指针的一个精典回答:

当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,
它时时刻刻指向你这个实例本身。

C++ this指针相关推荐

  1. MIT 6.s081学习笔记

    MIT 6.s081学习笔记 introduction 计算机组织结构: 最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡 最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所 ...

  2. Go 知识点(19)— Go 语言中的野指针

    野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...

  3. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  4. Go 学习笔记(71)— Go 接口 interface (接口定义、接口实现、接口调用、值接收者、指针接收者)

    1. 接口的定义 接口是和调用方的一种约定,它是一个高度抽象的类型,不用和具体的实现细节绑定在一起.接口要做的是定义好约定,告诉调用方自己可以做什么,但不用知道它的内部实现,这和我们见到的具体的类型如 ...

  5. Go 学习笔记(70)— Go 变量声明、变量初始化、值类型变量赋值、指针类型变量赋值

    1. 变量声明 要单纯声明一个变量,可以通过 var 关键字,如下所示: var s string 该示例只是声明了一个变量 s,类型为 string,并没有对它进行初始化,所以它的值为 string ...

  6. c/c++中的函数指针和指针函数

    定义 1.指针函数,本质是函数,返回值为指针,形如,int *pfun(int, int),由于"*"的优先级低于"()"的优先级,所以等同于int *(pfu ...

  7. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  8. 【数据结构】链表中的 指针,地址

    数据结构中跳过集合,直接开始线性结构 线性结构中单链表的操作涉及到给一个变量赋值地址,所以涉及到了指针 通过指针里的地址很方便找到节点 但指针这里绕了我很长时间,不论学了多少遍也不敢说把指针学会了 地 ...

  9. Qt实现 指针式时钟+动态时钟 (详细注释)

    先上效果图: 点击运行后首先是一个指针式时钟窗口,点击Digital Clock->可以跳转到数字时钟窗口,再点击Move Clock->可以还原为指针式时钟窗口 关于整个程序的讲解都在代 ...

  10. 【C语言】数组指针与指针数组的区分与应用

    这里以一道C语言题--输出矩阵两个对角线上的数(二维数组)为例 7-57 输出矩阵两个对角线上的数(二维数组) (6 分) 编写程序,将数据输入一个n * n二维数组中,输出矩阵两个对角线上的数.假设 ...

最新文章

  1. FusionCharts简明教程(一)---建立FusionCharts图形
  2. mysql的增量备份方法_Mysql 增量备份,全部备份实现方法以及自动化脚本
  3. Tornado,了解一下
  4. eclipse搜索框太小
  5. 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析
  6. jQuery ajax get与post后台交互中的奥秘
  7. 安卓开发应该知道的Drawable、Bitmap、Canvas和Paint的关系
  8. 修改表格字体颜色_为什么用格式刷无法匹配文字的字体和颜色?到底哪些特性可以匹配?...
  9. 控制台输入聊天记录 输出到文件中保存 Day20
  10. KELl警告: MULTIPLE CALL TO SEGMENT
  11. 普通类创建获取session 方式_博物馆类建筑的空调与通风工程设计(附图纸参考,要图的看文本获取方式)...
  12. 计算机可以怎样做游戏,如何制做游戏 怎么制做游戏
  13. swift生成二维码
  14. 《STL源码剖析》--memery
  15. 机动战士高达观影顺序
  16. linux 导出dump文件
  17. 中国地区“MMM dd, yyyy HH:mm:ss a“的时间格式问题
  18. 第五届蓝桥杯C/C++本科B组(真题试做)(6~8)
  19. 张小龙在2017微信公开课PRO版讲了什么(附演讲实录和2016微信数据报告)
  20. Python入门练习选择题

热门文章

  1. 计算机B级怎么学,全国计算机等级考试教程一级B
  2. ApexCharts使用示例 -- 多图表同时执行交互操作
  3. 基于javaweb+mysql的电影在线观看系统(java+ssm+jsp+layui+maven+mysql)
  4. 以MPU6050为例的硬件IIC的使用
  5. 关于代码的那些低级错误
  6. (KA)*(KA的伴随)
  7. html audio 列表,html5中audio实现播放列表和自动播放
  8. 开源无疆|京东云参加2019开源年会,助力开源
  9. 五年crud经验,三个月啃透Java王者级核心宝典,竟翻身阿里p6
  10. 通过Wireshark抓包疯狂聊天程序聊天记录