在之前学习Python时,接触到self形参,它是指向类对象的一个地址。

在C++学习过程中,也有这样的机制,那就是this指针

我们在调用成员函数的时候,实际上是替类的对象调用它!成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象!当我们调用成员函数的时候,用请求的该函数的对象的地址来初始化this形参。即编译器负责把对象的地址传递给this形参。

因为this的目的总是指向这个对象,因此,this默认是常量指针!我们不允许改变this中的地址。


有时候我们为了避免调用的成员函数修改调用对象的内容,常常把这个成员函数声明为常量成员函数,常见的做法是在函数的声明之后添加const关键字!

sales_data& combine(const sales_data&) const;

默认的情况下,this的类型是指向类类型非常量版本的常量指针。即是: sales_data * const

也就是,this指针保存的地址不能改变,但是指向的对象的内容可以改变。

当我们在成员函数声明之后添加const关键字之后,就将this修改为   const  sales_data * const  ,避免调用的成员函数修改调用对象的内容。


定义一个返回this对象的函数

sales_data& sales_data::combine(const sales_data & rhs)
{units_sold += rhs.units_sold;revenue += rhs.revenue;return *this;
}

我们无须使用隐式的this指针访问函数调用者的某个具体成员,而是需要把调用函数的对象当作是一个整体来访问。return语句解引用this指针以获得执行该函数的对象。

16.C++中的this指针相关推荐

  1. 【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )

    文章目录 一.结构体中嵌套二级指针 1.结构体中嵌套二级指针 类型声明 2.为 结构体内的二级指针成员 分配内存 3.释放 结构体内的二级指针成员 内存 二.完整代码示例 一.结构体中嵌套二级指针 1 ...

  2. c++ 智能指针_详解 C++ 11 中的智能指针

    C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念.这里不置贬褒,手动分配内存与手动释放内 ...

  3. C++ 中的this指针详解及实例

    C++ 中的this指针详解及实例 这篇文章主要介绍了C++ 中的this指针详解及实例的相关资料,this指针是类的一个自动生成.自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对 ...

  4. Perl 教学 Perl5中的引用(指针)

    一.引用简介    引用就是指针,可以指向变量.数组.哈希表(也叫关联数组)甚至子程序.Pascal或C程序员应该对引用(即指针)的概念很熟悉,引用就是某值的地址,对其的使用则取决于程序员和语言的规定 ...

  5. (C++)函数参数传递中的一级指针和二级指针

    主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址; 二级指针: ...

  6. c语言 一个函数返回结构体指针,详解C语言结构体中的函数指针

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式, ...

  7. C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)

    文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...

  8. 在析构函数中delete this指针问题

    思考:在析构函数中delete this指针,运行下面代码会产生什么样的结果呢? #include <iostream> using namespace std; class A{ pub ...

  9. 结构体中定义函数指针

    结构体指针变量的定义,定义结构体变量的一般形式如下: 形式1:先定义结构体类型,再定义变量 struct结构体标识符 { 成员变量列表;- }; struct 结构体标识符 *指针变量名; 变量初始化 ...

最新文章

  1. Libzip 版本过低或提示reinstall解决方法
  2. 计算机二级c真题108套,2016年计算机二级108套程序.docx
  3. ECSHOP删除云服务
  4. 自学使用sort他命令使用
  5. cv python 找不同_python – 在Gridline for GridSearchCV中替换不同的模型
  6. jsr303jsp页面怎么显示错误信息_jsp校验信息不显示
  7. 数据库系统服务器的运维
  8. 上位机和下位机的概念,理解如何实现PC从PLC中读取数据?
  9. 电脑老是弹出vrvedp_m_解答电脑启动项如何设置
  10. node.js——阿里企业级服务框架Egg搭建
  11. “备胎”海思的蛰伏与挑战
  12. 【YOLO3D】:端到端3D点云输入的实时检测
  13. [No000003]现代版三十六计,计计教你如何做人
  14. 含耦合电感元件的电路分析
  15. SaaS(软件即服务)架构设计
  16. android手机访问网站时 出现您未被授权查看该页 您试图访问的 Web 服务器上有一个不被允许访问该网站的 IP 地
  17. 创建windows虚拟机详细教程
  18. word2016拼音指南功能无效解决方案
  19. linux如何备份内核,Linux 中我该如何备份系统
  20. oracle SQL update一次性修改多个字段,数据来源于另一张表

热门文章

  1. Android 源码解析之AsyncTask
  2. Highcharts在IE中不能一次性正常显示的一种解决办法
  3. C++语言基础 例程 文本文件的读写
  4. 敏捷结果30天之第四天:放弃一些事情
  5. 点是否在面内算法(Point-In-Polygon Algorithm)
  6. 在 Django 中使用 pyecharts
  7. python作用域-Python之函数作用域
  8. sublime配置python开发环境_win7 下搭建sublime的python开发环境的配置方法
  9. mongodb导出导入实例记录
  10. 智联招聘爬虫源码分析(一)