const修饰成员函数有两个理由

1 让类的接口更容易理解,因为这可以方便程序员知道那个函数可以改变对象内容,而那个函数不能改。

2 让类能够操作const对象。

有一个非常重要的C++特性是

两个成员函数,如果只是常量性不同,他们可以重载。

常成员函数意味着什么?有两种流行的概念来解释:

bitwise 常量, 逻辑常量

bitwise 常量阵营认为,成员函数不改变对象的任何一个bit、然而。如果对象成员是指针,常成员函数不改变指针,却可以改变指针所指之物。

这种情况下,出现了逻辑常量。利用这一特性,我们可以在常成员函数内部,用mutable修饰需要改变的成员变量。改变其值。

同时,在常成员函数和非常成员函数中,不可避免的存在代码重复的问题,为此,我们在非常成员函数内,调用常成员函数。

但是,这一过程要做两次类型转换。第一次是,给*this加上const,然后调用常成员函数,接着,脱去常量性。因为是在非常成员函数中调用。

const修饰成员函数总结相关推荐

  1. C++基础08-this指针-const修饰成员函数-函数返回引用/值

    一.this指针 1.C++类对象中的成员变量和成员函数是分开存储的.C语言中的内存四区模型仍然有效! 2.C++中类的普通成员函数都隐式包含一个指向当前对象的this指针. 3.静态成员函数.成员变 ...

  2. c/c++教程 - 2.4.3 this指针作用,链式编程思想,空指针访问成员函数,const修饰成员函数,常函数,常对象

    目录 4.3 C++对象模型和this指针 4.3.1 成员变量和成员函数分开存储 4.3.2 this指针概念(非常重要) 4.3.3 空指针访问成员函数 4.3.4 const修饰成员函数 相关教 ...

  3. C++学习笔记(十)成员变量和成员函数分开存储、this指针、空指针访问成员函数、const修饰成员函数、友元

    1.成员变量和成员函数分开存储 //1.在C++中,类内的成员变量和成员函数分开存储 //2.只有非静态成员变量才属于类的对象上 //空对象占用内存空间为:1 //C++编译器会给每个空对象也分配一个 ...

  4. C++ 常函数(const修饰成员函数)

    常函数 const修饰成员函数 const修饰成员函数 常函数: 1.成员函数后加const后我们称这个函数为常函数. 2.常函数不可以修改成员属性. 3.成员属性声明时加关键字mutable后,在常 ...

  5. 类和对象—对象特性—const修饰成员函数

    常函数: 成员函数后加const后我们称这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键词mutable 后在常函数中依然可以修改 常对象 声明对象前加 const称该对象为常对象 ...

  6. C++const修饰成员函数

    C++全局函数做友元 常函数 常对象 示例 常函数 成员函数后加const后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后,在常函数中依然可以修改 常对象 ...

  7. 为什么不能同时用const和static修饰成员函数?

    const修饰的函数: 表示在该函数体内不能修改成员的值,会在函数中添加一个隐式的参数const this*. static修饰的函数没有this指针,与const的用法冲突. 但可以使用static ...

  8. C++ const对成员函数的修饰 及 取地址及const取地址操作符重载

    const对成员函数的修饰 将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this 指针,表明在该成员函数中不能对类的任何成员进行修改. 格式 ...

  9. const类型成员函数与mutable

    const类型成员函数与mutable 原文:http://houhualiang.i.sohu.com/blog/view/42619368.htm   const类型的成员函数是指使用const关 ...

最新文章

  1. CString初始化时提示字符串太大
  2. 五种方法查看Ubuntu/Redhat等Linux系统版本号等系统信息
  3. 技术人的灵魂 3 问,阿里工程师如何解答?
  4. ajax请求目标地址,AJAX功能目标
  5. java paint 怎么用_java如何使用paint方法画图
  6. 每日程序C语言25-查找100以内的素数
  7. SAP Spartacus 3.3.0 版本服务器端渲染的优化
  8. mysql如何管理空间_管理空间的mysql数据库
  9. qt自带静态代码检测工具_两款静态代码检测工具的对比
  10. [HNOI 2011]数学作业
  11. mybatis 调用存储过程
  12. Selenium应用代码(常见封装的方法二)
  13. java动作触发声音_关于鼠标动作的声音如何添加
  14. 【数值分析实验】线性代数方程组的直接解法:列主元高斯消去法、LU分解法、LU分解法求矩阵的逆(python)
  15. java获取CPU温度centos,用软件lm_sensors监测Linux系统和CPU温度
  16. 指数退避和AIMD为什么都青睐数字2
  17. 特殊符号大全复制_上榜!4.15特殊符号大全优美的制作网名符号案例分享,适合微信游戏昵称...
  18. JavaWeb HTML
  19. 瞧,他的代码,他的内裤
  20. 探索、松散结构,和大家谈谈关于社区的思考|shadow与mixlab的故事

热门文章

  1. C语言之如何理解指针的指针(九)
  2. android之修改gradle源
  3. sap原因代码配置路径_使用Visual Studio Code编写和激活ABAP代码 (上)
  4. axios 上传文件 封装_axios 封装【满足常规数据上传及file上传】
  5. cs python课程 加州大学_最新盘点!全球顶尖大学CS+数据科学的免费在线课程,共81个...
  6. 数学建模可以用python吗_Python中常用的数学建模Scipy
  7. CentOS 7 使用ip addr查询不到IP
  8. 用C++做一个通讯录管理系统(手把手教学)
  9. php原生判断,JavaScript
  10. java web接收tcp_Java多线程实现TCP网络Socket编程(C/S通信)