const类型成员函数与mutable

原文:http://houhualiang.i.sohu.com/blog/view/42619368.htm

 

const类型的成员函数是指使用const关键字进行修饰的类的成员函数。const类型的成员函数对函数内部的操作加以一定的限制,比如不可以对对象的属性进行修改等,这样可以提高程序代码的正确性。 在使用关键字const对成员函数修饰的时候,将const放在成员函数的后面。在定义对象的时候,可以使用关键字const声明对象为常量对象。对于常量对象,如果使用非常量成员函数来操作,则会出现一个编译错误;同样,对于使用关键字volatile声明的对象, 如果使用非volatile类型的成员函数来操作,也会出现一个编译错误。 如果想修改const类型对象的成员变量,可以使用关键字mutable对该成员变量进行修饰。

 1 #include <iostream.h>
 2 #include <conio.h>
 3 class CDate
 4 {
 5    public:
 6    int year;
 7    mutable int month; // 使用关键字mutable进行修饰
 8    CDate(int y=2000,int m=1)
 9    {
10       year= y;
11       month= m;
12    };
13    int GetMonth() const; // 一个只读函数
14    void SetMonth( int m ); // 一个写函数
15 };
16 int CDate::GetMonth() const
17 {
18    // 下面一行错误,故屏蔽掉
19    // year++; // 但如果是month+ + ;则没问题
20    return month; // 在只读函数中不可以进行改写操作
21 }
22 void CDate::SetMonth(int m)
23 {
24    month = m; // 设置月份
25 }
26 void main()
27 {
28    CDate d1;
29    d1.Setmonth(9);
30    d1.year=1975 ;
31    cout<<"d1:"<<d1.year<<"年"<<d1.Getmonth()<<"月\n";
32    const CDate d2;
33    d2.month=7;
34    cout<<"d2:"<<d2.year<<"年"<<d2.Getmonth()<<"月\n";
35    // 下面一句错误,故屏蔽掉
36    // d2.SetMonth(7); // 不可以对常量对象调用非常量成员函数
37    // 下面一句错误,故屏蔽掉
38    // d2.year=1973; // 不可以修改常量对象的成员变量
39 }

运行结果:
d1:1975年9月
d2:2000年7月
说明:
• 在上面的CDate类中,成员变量year为普通类型的变量,而成员变量month为mutable类型的成员变量,所以成员变量month不受const的约束,这可以从上面例程中的多个方面表现。
• 在const类型的成员函数定义体中,不可以直接或间接地修改普通类型的成员变量(mutable类型的成员函数除外)。当对象被声明为const类型后,一般也不可以直接或间接地修改对象的成员变量( mutable类型的成员函数除外)。

转载于:https://www.cnblogs.com/lx09110718/p/constmutable.html

const类型成员函数与mutable相关推荐

  1. 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修饰成员函数 相关教 ...

  2. C++ static、const和static const类型成员变量声明及其初始化

    C++ static.const和static const类型成员变量声明及其初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. ...

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

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

  4. 简单总结 常(常量/const)成员函数 and 常对象的使用

    一.常(常量/const)成员函数 在函数定义式()后 + const 比如: class Rational { public://非常成员函数void func() { cout << ...

  5. C++ const型成员函数与 non-const型成员函数 (二)

    C++ const型成员函数与 non-const型成员函数 const 型变量的含义,就是不意修改,就是告诉编译器,不想通过一般的形式修改我的值,除非const_cast去除常量性. vs2013 ...

  6. C++ const型成员函数与 non-const型成员函数

    首先一点,二者是可以构成重载的,仅根据返回值的 const/non-const 与否是无法构成重载的: class A { public:void foo() {} // 非 const 型成员 }; ...

  7. const修饰成员函数总结

    const修饰成员函数有两个理由 1 让类的接口更容易理解,因为这可以方便程序员知道那个函数可以改变对象内容,而那个函数不能改. 2 让类能够操作const对象. 有一个非常重要的C++特性是 两个成 ...

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

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

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

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

最新文章

  1. nginx配置错误而导致目录遍历漏洞
  2. loadrunner脚本编写,对nginx进行压测
  3. 虚拟化部署之Hyper-V虚拟网络配置
  4. 3.5 将 Batch 拟合进神经网络-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. 2020-11-10(service入门)
  6. C++Builder中ListView控件用法和示例总结整理
  7. Java——递归练习
  8. java中对象类型转换_Java中的对象的类型转换介绍(附代码)
  9. 【第二组】项目冲刺(Alpha版本)第三次每日例会 2017/7/13
  10. 资深码农:拿下软件测试,只需掌握好这两种方法!
  11. 解决”不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接“问题
  12. win固定ip无效,自动配成169.254.xx.xx
  13. 鸿蒙os 2.0跑分,预装鸿蒙 OS 2.0!华为 MatePad Pro2 跑分曝光:麒麟 9000、8GB 内存
  14. centos 搭建nfs服务器
  15. WordPress 简约大气昼夜免费导航-NDNAV主题
  16. linux配置cookie认证,Nginx配置修改网页cookie属性
  17. NFT头像屡拍天价,如何从理性角度分析其市场价值?
  18. 华北电力保定校区计算机专业好就业吗,2021年华北电力大学(保定)专业排行榜,哪个专业就业比较好...
  19. PHP图片尺寸调整(全填充,没有黑底)
  20. Ubuntu 18.04及Snap体验——让Linux入门更简单(转))

热门文章

  1. 笔试面试收获(持续更新中)
  2. 数据结构之单链表(头结点)的一些常用操作(增删改查逆)
  3. 20180601]函数与标量子查询2.txt
  4. Java网络编程从入门到精通(5):使用InetAddress类的getHostName方法获得域名
  5. 第九周项目6-穷举法之年龄几何
  6. [文档]. Xilinx - 编写有效的Testbenches
  7. 利用fastjson对json转map的操作
  8. facade-pattern外观模式
  9. python判断字典,列表,元组为空的方法。
  10. 解决selenium.common.exceptions.WebDriverException: Message: unknown error: call function result missin