C++常成员函数用法

1.在一个普通成员函数后面加上const修饰,就是常成员函数

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

注意:

普通成员函数才有常函数。C++中构造函数,静态成员函数,析构函数,全局成员函数都不能是常成员函数。构造成员函数的用途是对对象初始化,成员函数主要是用来被对象调用的,如果构造函数被设置成const,就不能更改成员变量,失去了其作为构造函数的意义。同理析构函数。全局成员函数和静态成员函数static其函数体内部没有this指针,所以也不能是常成员函数

2.常函数中的this指针是常指针,不能在常成员函数中修改成员变量的值

结果报错:


自增型变量是一个只读的变量

意义:

可以防止程序员不小心修改了成员变量的值。例如下图:调用两次change_value函数后,成员变量的值data被改变成101;

如果一个常成员函数的接口,可通过以下方法仍然可以改变成员变量的值

(1)对this指针做去常转换

cout << const_cast< ConstFunction* >(this)->data++ << endl;

(2)用关键词mutable修饰需要改变的成员变量

private:mutale int data;

扩大权限是不安全的。常属性扩大到非常属性是不安全的;缩小权限是可以的。非常属性缩小到常属性是安全的,不会报错;

void func(int * a){};                        void  func2(const Int *pa){}
int main(){                                 int main(){int pa=100;                         int pa=100;const int * pn=&pa;                    int *pn=&pa; func(pn);                             func2(pn);return 0;                         return 0;
}                                           }

pn具有常属性,函数形参不具有常属性,属于范围扩大的应用,编译器会报错;
后者则不会报错。pn具有非常属性,用于常属性形参的调用范围缩小;

3.非const对象可以调用常函数,也能调用非常函数。但是常对象只能调用常函数,不能调用非常函数(常对象也包括常指针和常引用)

示例一:

示例二:

函数名和形参表相同的常函数和非常函数构成重载关系,常对象调用常函数,非常对象调用非常函数

C++常函数的用法详解相关推荐

  1. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

  2. java string()函数_转载java String.split()函数的用法详解

    转载java String.split()函数的用法详解 如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!在java.lang包中有String.split()方法的原型是: p ...

  3. c语言memcopy_C语言中memcpy 函数的用法详解

    C语言中memcpy 函数的用法详解 memcpy(内存拷贝函数) c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址 ...

  4. matlab 调整灰度,matlab灰度图像调整及imadjust函数的用法详解

    matlab--imadjust函数作用: 对进行图像的灰度变换,即调节灰度图像的亮度或彩色图像的颜色矩阵 在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: J= ...

  5. oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解

    Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...

  6. python search用法,Python-re中search()函数的用法详解(查找ip)

    1.首先来看一下search()和find()的区别 import re s1 = "2221155" #search 字符串第一次出现的位置 print(re.search(&q ...

  7. snprintf函数的用法详解

    c语言的snprintf函数的用法详解 snprintf()函数是一种格式化函数,用于将格式化的字符串存储到一个字符数组中,并且有一个参数用来限制输出的最大字符数. 语法: int snprintf ...

  8. c++ opencv函数putText用法详解

    c++ opencv函数putText用法详解 #include <stdio.h> #include <iostream> #include <opencv2/open ...

  9. mid函数怎么用mysql_MySQL MID()函数的用法详解(代码示例)-mysql教程-学派吧

    在MySQL中,MID()函数返回从指定位置开始的子字符串. MID()和SUBSTR()都是SUBSTRING()的同义词. 基本语法是这样的: MID(str,pos,len) 这里,str是字符 ...

最新文章

  1. rust腐蚀 木制窗户怎么修_装修窗帘怎么选最划算?记住这3点,至少能省大几千...
  2. 1.mongodb在centos上面安装
  3. 协同滤波模型的推荐算法(ACM暑校-案例学习)
  4. ORACLE TEXT DATASTORE PREFERENCE(五)
  5. 华南理工大学网络教育计算机答案,计算机应用基础--随堂练习2019春华南理工大学网络教育答案...
  6. C++常用的系统函数
  7. 【Java】利用递归求阶乘
  8. LeetCode(506)——相对名次(JavaScript)
  9. HDU 6370(并查集)
  10. 解决从登录页通过this.$router.push跳转首页后 点返回健路由变而页面不变的问题
  11. 手机闹钟软件测试用例,手机app测试用例.docx
  12. Window系统怎么如何激活?详细版
  13. ECharts数据可视化:从0到1的蜕变(内部技术分享总结)
  14. 国际商业分析师CBAP认证与PMI-PBA认证的区别——上海信息化培训中心
  15. HDU 5437by cyl优先队列
  16. Android SIM卡识别加载流程
  17. ubuntu 安装wifi驱动(Device-c822)
  18. 中国互联网的沧海桑田
  19. 计算机后来音乐,Computer Music
  20. debian安装java

热门文章

  1. 计算机科学学现代,现代计算机科学的鼻祖
  2. 百度云是如何做到甄别用户上传到网盘的违规内容并删除用户上传的资源的?
  3. xgboost时间序列预测matlab,LightGBM和XGBoost实现时间序列预测(2019-04-02)
  4. 前端使用AudioContent左右声道切换
  5. 扫地机器人作文说明文提纲_关于物品的说明文:扫地机器人的自述
  6. adb无线连接控制android手机
  7. Chrome 书签你知道怎么导入吗(谷歌浏览器的书签保存在哪里 、谷歌浏览器书签保存在哪个文件夹)
  8. Xposed插件编写
  9. 百词斩秋招java,成都百词斩2018web前端秋招笔试题
  10. 杨亮词汇5500-课程导学