C++中对封装的语法支持——this指针
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指针的更多相关文章
- C++中对封装的语法支持——静态成员
静态成员(变量与函数) 1.静态成员变量的语法.访问.特点(共享.类内声明类外初始化) 静态成员变量在class中只做声明,并没有初始化所以不会分配内存. (1) 非静态成员变量必须通过对象来访问. ...
- C++中对封装的语法支持——重载运算符
重载运算符 1.对于自定义类型,编译器不知道运算规则,而重载运算符会将两个对象相加转换为函数调用. 2.运算符重载转换的函数调用,函数名字是固定的规则. (1) 如果重载+号运算符,函数名字就是:op ...
- C++中对封装的语法支持——友元
友元 1.友元就是授权给某个函数.每个成员函数.某个类具有访问类内部私有成员的权限. 2.为什么用友元?友元可以允许某个类.函数直接访问类内部私有数据,减少函数调用开销,提高效率. 3.友元函数不是成 ...
- Vs 2015 中一些新的语法支持
又是语法糖. 1, if (tdata != null && tdata.Data != null) 等价于 if (tdata?.Data != null) 2, int a ...
- EditPlus 中添加 Win32 ASM 语法支持
将以下内容保存为 Win32Asm.stx:然后选“工具”.“配置用户工具”.“设置与语法”.“添加”. “描述”=Win32Asm.“扩展名”=asm .”语法文件”选存入之文件,确定即可. #TI ...
- js中添加node.js语法支持
File——>settings
- 12.QT项目中启用c++11语法支持
greater Than(QT_MAJOR_VERSION, 4): CONFIG += c++11 less Than(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += ...
- Python3中的yield from语法
Python3中的yield from语法 by Kay Zheng Tags: python, 协程, generator 30 March 2014 2016-2-23 更新 這篇文章是兩年前寫的 ...
- C++内存中的封装、继承、多态(下)
上篇讲述了内存中的封装模型,下篇我们讲述一下继承和多态. 二.继承与多态情况下的内存布局 由于继承下的内存布局以及构造过程很多书籍都讲得比较详细,所以这里不细讲.重点讲多态. 继承有以下这几种情况: ...
随机推荐
- FLask中蓝图(用于分文件)
一,不使用蓝图,自己分文件 目录结构 -templates -views -__init__.py -user.py -order.py -app.py app.py from views impor ...
- App自动化之坐标定位
1.如下图定位"去看看"这个按钮的坐标,可以看到右侧bonds属性:[374,831][654,906] 2.点右上角"搜索"按钮,查看bonds属性:[615 ...
- Qt5教程: (8) 标准对话框和文件对话框
1. about对话框 包含头文件 #include <QMessageBox> 添加菜单项 QAction *p3 = pDialog->addAction("关于&qu ...
- C++中哪些函数不能声明为virtual?
首先要明确,virtual是用于支持类多态的关键字,所以出现在类声明之外的地方都是错误的.由此可以断定下文的1. 普通函数(即非类成员函数)不能是virtual的,否则不能通过编译,virtual只能 ...
- Electron开发跨平台桌面程序入门教程
最近一直在学习 Electron 开发桌面应用程序,在尝试了 java swing 和 FXjava 后,感叹还是 Electron 开发桌面应用上手最快.我会在这一篇文章中实现一个HelloWord ...
- python学习-流程控制(四)
学习笔记中的源码:传送门 4.2if分支结构 if语句有三种形式: 如果 if 条件为“真”,程序就会执行 i f条件后面的多条语句:否则就会依次判断 elif 条件,如果 elif 条件为“真”,程 ...
- 玩转PubSubClient MQTT库
1.前言 在ESP8266学习系列中,博主一直使用HTTP协议.HTTP连接属于短连接,而在物联网应用中,广泛应用的却是MQTT协议.所以,本篇我们将学习Arduino平台上的MQTT实现库 ...
- 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询
MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...
- JS-SDK
1. 签名 看到网上的大部分问题都集中在签名部分,请大家一定请熟读微信JS-SDK说明文档附录5-常见错误及解决方法 部分. 注意 在计算签名的过程中,如果url总是不对请 实验 首页的url或 ...
- 怎么在.NetCore3.0 中使用Log4net 写日志 及读取配置文件的信息
1:安装Log4Net的 NuGet 包: 我们通常之需要安装这一个包即可,其他的主包会自动被添加进来: insatll-package Microsoft.Extensions.Logging.L ...