您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

C++this 指针与常函数

时间:2019-06-05 10:25:18  来源:  作者:

1 this 指针

1)类的成员函数包括构造函数,都有一个隐藏的该类类型的指针,名字为 this。

a. 对于普通成员函数,this 指针指向调用该函数的对象。

b. 对于构造函数,this 指针指向正在被构造的对象。

2)在成员函数或构造函数直接访问成员变量实际都是通过 this 指针完成的,一般 this 可以省略不写,也可以显示写出来。

3)需要显示使用 this 指针的场景

a. 区分作用域

b. 从成员函数中返回调用对象的自身 (自引用)

class A{
 A& fun(void){
 ...
 return *this;
 }
}
 
int main(){
 A a;
 a.func();
}

c. 从类的内部销毁对象自身(对象自毁)

class A{
 void destory(void){
 ...
 delete this; //对象自毁
 }
}
int main(){
 A* pa = new A;
 //delete pa;
}

d. 作为函数实参,把一个对象传递给另一个对象,实现对象的交互。

2 常函数

1)在一个普通的成员函数不包括构造函数后面加上 const 关键字,这个成员函数就称为常函数。

返回类型 函数名 (形参表) const {函数体}

2)const 实际修饰的就是成员函数里面隐藏参数 this 指针,常函数中的 this 是一个常指针,不能在常函数中修改成员变量的值。

3)一般如果一个函数不需要修改成员变量的值,就可以定义为常函数,防止意外修改成员变量。

4)被 mutable 关键字修饰的成员变量可以在常函数中修改。

5)非常对象既可以调用非常函数也可以调用常函数,但常对象只能调用常函数,不能调用非常函数。

6)函数名和形参表相同的成员函数,其常版本和非常版本可以构成有效的重载,常对象调用常版本,非常对象调用非常版本。



Tags:C++ 指针   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
C/C++中,为了避免野指针(即指针没有指向任何地址)的出现,声明一个指针后,最好马上对其进行初始化。如果暂时不明确指针指向哪个变量,则可以赋予NULL,如:int* p = NULL;除了NULL之外...【详细内容】
2020-07-29  Tags: C++ 指针  点击:(114)  评论:(0)  加入收藏
1 this 指针1)类的成员函数包括构造函数,都有一个隐藏的该类类型的指针,名字为 this。a. 对于普通成员函数,this 指针指向调用该函数的对象。b. 对于构造函数,this 指针指向正在...【详细内容】
2019-06-05  Tags: C++ 指针  点击:(542)  评论:(0)  加入收藏
▌简易百科推荐
一、简介很多时候我们都需要用到一些验证的方法,有时候需要用正则表达式校验数据时,往往需要到网上找很久,结果找到的还不是很符合自己想要的。所以我把自己整理的校验帮助类分...【详细内容】
2021-12-27  中年农码工    Tags:C#   点击:(2)  评论:(0)  加入收藏
引言在学习C语言或者其他编程语言的时候,我们编写的一个程序代码,基本都是在屏幕上打印出 hello world ,开始步入编程世(深)界(坑)的。C 语言版本的 hello world 代码:#include <std...【详细内容】
2021-12-21  一起学嵌入式    Tags:C 语言   点击:(11)  评论:(0)  加入收藏
读取SQLite数据库,就是读取一个路径\\192.168.100.**\position\db.sqlite下的文件<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/...【详细内容】
2021-12-16  今朝我的奋斗    Tags:c#   点击:(21)  评论:(0)  加入收藏
什么是shellshell是c语言编写的程序,它在用户和操作系统之间架起了一座桥梁,用户可以通过这个桥梁访问操作系统内核服务。 它既是一种命令语言,同时也是一种程序设计语言,你可以...【详细内容】
2021-12-16  梦回故里归来    Tags:shell脚本   点击:(18)  评论:(0)  加入收藏
一、编程语言1.根据熟悉的语言,谈谈两种语言的区别?主要浅谈下C/C++和PHP语言的区别:1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互...【详细内容】
2021-12-15  linux上的码农    Tags:c/c++   点击:(17)  评论:(0)  加入收藏
1.字符串数组+初始化char s1[]="array"; //字符数组char s2[6]="array"; //数组长度=字符串长度+1,因为字符串末尾会自动添&lsquo;\0&lsquo;printf("%s,%c\n",s1,s2[2]);...【详细内容】
2021-12-08  灯-灯灯    Tags:C语言   点击:(47)  评论:(0)  加入收藏
函数调用约定(Calling Convention),是一个重要的基础概念,用来规定调用者和被调用者是如何传递参数的,既调用者如何将参数按照什么样的规范传递给被调用者。在参数传递中,有两个很...【详细内容】
2021-11-30  小智雅汇    Tags:函数   点击:(19)  评论:(0)  加入收藏
一、问题提出问题:把m个苹果放入n个盘子中,允许有的盘子为空,共有多少种方法?注:5,1,1和1 5 1属同一种方法m,n均小于10二、算法分析设f(m,n) 为m个苹果,n个盘子的放法数目,则先对...【详细内容】
2021-11-17  C语言编程    Tags:C语言   点击:(49)  评论:(0)  加入收藏
一、为什么需要使用内存池在C/C++中我们通常使用malloc,free或new,delete来动态分配内存。一方面,因为这些函数涉及到了系统调用,所以频繁的调用必然会导致程序性能的损耗;另一...【详细内容】
2021-11-17  深度Linux    Tags:C++   点击:(38)  评论:(0)  加入收藏
OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android、ios等操作系统上,它轻量级而且高效---由一系列...【详细内容】
2021-11-11  zls315    Tags:C#   点击:(50)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条