this指针

1、this概念

(1) This指针就是用于成员函数区分调用对象。

(2) This指针由编译器自动传递,无须手动传递,函数内部隐藏了this指针参数,本类类型的指针。

(3) 编译器不会为静态成员函数传递this指针。

2、this特点

1、非静态成员函数第一个隐藏参数就是this,this指向调用函数对象的常量指针,常函数。该函数不会去修改成员变量的值。

2、如果const写在函数后,const其实修饰的是this指针。如下图所示

class Person
{
public:
// Person * const this
// const Person * const this
void show() const
{ }
}

3、当形参与成员变量名冲突的时候,可以用来区分。

class Demo02
{
public:
Demo02(int a, int b)
{
this->a = a;
this->b = b;
} Demo02& get_self()
{
return *this;
} public:
int a;
int b;
};

4、如果一个对象被const修饰,常对象只能调用常函数。

class Demo03
{
public:
Demo03(int a, int b)
{
this->m_a = a;
this->m_b = b;
} // 不希望这个函数修改成员变量
// 可以将成员函数设置为常函数
// 大部分的成员变量不想修改,有个别的1个变量需要被修改
// mutable 修饰的成员变量,不受常函数限制
// const 修饰成员函数,本质上修饰的是 this 指针, Demo03 * const this;
// const Demo03 * const this;
// 常对象只能调用常函数
void show() const
{
// m_a = 100;
m_b = ;
cout << m_a << " " << m_b << endl;
} void print()
{
cout << m_a << " " << m_b << endl;
} public:
int m_a;
mutable int m_b;
}; void test02()
{
// 常量对象,常对象
const Demo03 d(, );
// d.print();
d.show();
}

C++中对封装的语法支持——this指针的更多相关文章

  1. C++中对封装的语法支持——静态成员

    静态成员(变量与函数) 1.静态成员变量的语法.访问.特点(共享.类内声明类外初始化) 静态成员变量在class中只做声明,并没有初始化所以不会分配内存. (1) 非静态成员变量必须通过对象来访问. ...

  2. C++中对封装的语法支持——重载运算符

    重载运算符 1.对于自定义类型,编译器不知道运算规则,而重载运算符会将两个对象相加转换为函数调用. 2.运算符重载转换的函数调用,函数名字是固定的规则. (1) 如果重载+号运算符,函数名字就是:op ...

  3. C++中对封装的语法支持——友元

    友元 1.友元就是授权给某个函数.每个成员函数.某个类具有访问类内部私有成员的权限. 2.为什么用友元?友元可以允许某个类.函数直接访问类内部私有数据,减少函数调用开销,提高效率. 3.友元函数不是成 ...

  4. Vs 2015 中一些新的语法支持

    又是语法糖. 1, if (tdata != null && tdata.Data != null) 等价于   if (tdata?.Data != null)   2, int a ...

  5. EditPlus 中添加 Win32 ASM 语法支持

    将以下内容保存为 Win32Asm.stx:然后选“工具”.“配置用户工具”.“设置与语法”.“添加”. “描述”=Win32Asm.“扩展名”=asm .”语法文件”选存入之文件,确定即可. #TI ...

  6. js中添加node.js语法支持

    File——>settings

  7. 12.QT项目中启用c++11语法支持

    greater Than(QT_MAJOR_VERSION, 4): CONFIG += c++11 less Than(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += ...

  8. Python3中的yield from语法

    Python3中的yield from语法 by Kay Zheng Tags: python, 协程, generator 30 March 2014 2016-2-23 更新 這篇文章是兩年前寫的 ...

  9. C++内存中的封装、继承、多态(下)

    上篇讲述了内存中的封装模型,下篇我们讲述一下继承和多态. 二.继承与多态情况下的内存布局 由于继承下的内存布局以及构造过程很多书籍都讲得比较详细,所以这里不细讲.重点讲多态. 继承有以下这几种情况: ...

随机推荐

  1. IDA快捷键整理

    空格键 反汇编窗口切换文本跟图形 ESC退到上一个操作地址 G搜索地址或者符号 N重命名 分号键 注释 ALT+M 添加标签 CTRL+M 列出所有标签 CTRL +S 二进制段的开始地址结束地址 C ...

  2. HDU 1506 Largest Rectangle in a Histogram(区间DP)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题目: Largest Rectangle in a Histogram Time Limit: ...

  3. 玩转OneNET物联网平台之HTTP服务③ —— OneNet智能灯 HTTP版本

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  4. OptimalSolution(3)--链表问题(2)进阶

    一.环形单链表的约瑟夫问题 二.判断一个链表是否为回文结构 三.将单向链表按某只划分成左边小.中间相等.右边大的形式 四.复制含有随机指针节点的链表 五.两个单链表相交的一系列问题 六.将单链表的每K ...

  5. 设计模式(十四)Chain of Responsibility模式

    Chain of Responsibility模式就是当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任.也就是说,当一个人被要求做什么事时,如果他可以做就自己做, ...

  6. 数据结构(四十六)插入排序(1.直接插入排序(O(n²)) 2.希尔排序(O(n3/2)))

    一.插入排序的基本思想 从初始有序的子集合开始,不断地把新的数据元素插入到已排列有序子集合的合适位置上,使子集合中数据元素的个数不断增多,当子集合等于集合时,插入排序算法结束.常用的 插入排序算法有直 ...

  7. (一)django创建

    1.打开终端,安装django:输入pip install django 2.创建django项目:django-admin startproject myweb 3.启动项目:进入到myweb,输入 ...

  8. 设计模式C++描述----19.命令(Command)模式

    一. 举例说明 我们知道,在多线程程序中,多个用户都给系统发 Read 和 Write 命令.这里有几点需要说明: 1. 首先明确一点,所有的这些 Read 和 Write 命令都是调用一个库函数. ...

  9. 怎么安装wordcloud

    python第三方组件有很多都是whl文件,遇到这样的whl文件应该怎样安装呢,今天来介绍一下whl文件怎样安装. 更多内容访问omegaxyz.com 先推荐一个非正式第三方whl文件包的网站: h ...

  10. 20191106-使用pyttsx对文本进行语音输出

    实现pyttsx文字转语音的开源库调用 参考: 1.  https://blog.csdn.net/liuyubo23/article/details/83990532 2.  https://www ...