1. const成员函数 只是告诉编译器,表明不修改类对象. 但是并不能阻止程序员可能做到的所有修改动作,比如对指针的修改,编译器可能无法检测到
2. 类体外定义的const成员函数,在定义和声明处都需要const修饰符

1 class classname
 2 {
 3 public:
 4     classname() {}
 5     ~classname();
 6 
 7     void foo() const;
 8     char &operator[](int i);
 9 private:
10     //.
11 }
12 
13 void classname::foo() const
14 {
15 //
16 }
17 
18 char &classname::operator[](int i)
19 {
20 //..
21 }
22 int main()
23 {
24     const classname obj();
25     obj.foo();//ok
26     obj[2];//error,coz [] not const
27 }
28 

3. const对象为常量对象,它只能调用声明为const的成员函数。但是构造函数和析构函数是唯一不是const成员函数却可以被const对象调用的成员函数。 当然,一般对象当然也可以调用const成员了

 1 class A
 2 {
 3 public:
 4     A(int x, int y) : _x(x), _y(y) {}
 5     //int get() { return _x;}
 6     int get() const { return _y;}
 7 private:
 8     int _x, _y;
 9 };
10 
11 int main()
12 {
13     A obj(2, 3);
14     const A obj1(2, 3);
15     cout << obj.get() << " " << obj1.get();//3 3
16     
17     return 0;
18 }
19 
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     A(int x, int y) : _x(x), _y(y) {}
 8     int get() { return _x;}
 9     //int get() const { return _y;}
10 private:
11     int _x, _y;
12 };
13 
14 int main()
15 {
16     A obj(2, 3);
17     const A obj1(2, 3);
18     cout << obj.get() << " " << obj1.get();
19     //错误,obj1为常量对象,不能调用非const方法
20     return 0;
21 }

4. const成员函数可以被相同参数表的非const成员函数重载

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     A(int x, int y) : _x(x), _y(y) {}
 8     int get() { return _x;}
 9     int get() const { return _y;}
10 private:
11     int _x, _y;
12 };
13 
14 int main()
15 {
16     A obj(2, 3);
17     const A obj1(2, 3);
18     cout << obj.get() << " " << obj1.get();
19     // 2  3
20     return 0;
21 }
22 

4. 为了允许修改一个类的成员变量,即使是一个const对象的数据成员,于是引入了mutable
通过将数据成员声明为mutable, 表明此成员总是可以被更新,即使在一个const成员函数中。

转载于:https://www.cnblogs.com/chio/archive/2007/06/06/774344.html

const成员函数、const类对象、mutable数据成员相关推荐

  1. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  2. c ++类成员函数_C ++编程中的数据成员和成员函数

    c ++类成员函数 C ++中的数据成员和成员函数 (Data members and Member functions in C++) "Data Member" and &qu ...

  3. c++11 bind直接绑定未初始化类的成员函数、类对象的operater()的方法与区别

    针对标题的两种情况,使用起来有一定的特殊性,特此记录下. 至于其他常规的bind使用方法,网上有很多文章有介绍,也可以看这篇文章. 标题的两种情况: 情况一: 这个例子用了两个知识: 第一,关于std ...

  4. c++类对象公有数据成员访问

    #include<iostream> using namespace std; class CDate {public:int Date_Year;int Date_Month;int D ...

  5. 类的静态数据成员和静态成员函数浅析

    一.静态数据成员        类中的数据成员声明前加上static,则表示该数据成员为静态数据成员.除了与其他数据具有相同的public/private/protect访问属性外,还有一些其他的属性 ...

  6. 类的静态数据成员和静态成员函数

    一.什么是类的静态成员 静态成员变量和全局变量都存储在全局/静态区,它们都是在程序编译时创建,直到编译结束才被收回.所以全局变量和静态成员变量的功能差不多,只是创建的方式不同,类的静态成员创建在类中, ...

  7. C++ 常数据成员、常成员函数和常对象

    首先给出一个例子简单理解const修饰数据变量的基本工作原理: #include <stdio.h>int main() {const int a = 250;int *ptr = (in ...

  8. C++:用含成员函数的类来实现输入和输出时间。

    题目概述: 用含成员函数的类来实现输入和输出时间. 编程: #include < iostream> using namespace std; class Time //声明Time类 { ...

  9. 成员函数的选择调用一一常成员函数 (12 分)

    成员函数的选择调用一一常成员函数 (12 分) 类中的常对象选择调用常成员函数.语法要点: 如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数, 而不能调用其他成员函数.补充完整复数类的 ...

最新文章

  1. 十几年后我才知道,嫁了一个硬核老公
  2. python容器数据类型_python collections 容器数据类型
  3. Day14作业 二、有两个List集合怎么取两个无重复的并集
  4. POJ - 2942 Knights of the Round Table(点双缩点+二分图判定)
  5. box-sizing的使用
  6. 数据科学家应该学习JavaScript吗?
  7. java继承test 怎么写_Java Junit Test 要怎么写?
  8. 机器学习监督学习之分类算法---朴素贝叶斯代码实践
  9. python游戏引擎-转:十大开源游戏引擎深入比较
  10. java如何生成jar包
  11. ARINC429协议芯片DEI1016工作原理
  12. C语言Case语后是字符串,c语言中的switch case语句
  13. 多个服务器数据互通_打造生态循环《剑网3:指尖江湖》第二批服务器数据互通...
  14. 2020华为软件精英挑战赛历程总结——复赛篇
  15. 初识机器阅读理解(Machine Reading Comprehension)
  16. android之在app图标添加角标,Android之在app图标添加角标
  17. android实现阅读器底部菜单,android仿新闻阅读器菜单弹出效果实例(附源码DEMO下载)...
  18. 万能Ghost系统制作教程
  19. 反射内存卡读写测试(RFM2gRead和RFM2gWrite)-- C++
  20. 告别福禄克DTX系列,欢迎dsx2-5000网线测试

热门文章

  1. 找不到_我的圣诞礼物找不到了!
  2. hibernate3 hbm2java_hibernate3下hbm2ddl和hbm2java的配置
  3. c语言输入字符串的格式不正确的是,关于c#:输入字符串的格式不正确
  4. css 剪辑图片_CSS中的clip-path裁剪图片用法
  5. html5如何划分区域,10.4 51单片机 RAM 区域的划分
  6. 上传图片方向不对 php,php-上传图片时出现错误,没有这样的路径或目录
  7. hadoop删除DataNode节点
  8. ubuntu下命令行启动vmware某个虚拟机
  9. 配置Tomcat连接池
  10. 自然语言处理之词向量技术(二)