const成员函数、const类对象、mutable数据成员
2. 类体外定义的const成员函数,在定义和声明处都需要const修饰符
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成员了
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
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成员函数重载
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数据成员相关推荐
- C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)
1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...
- c ++类成员函数_C ++编程中的数据成员和成员函数
c ++类成员函数 C ++中的数据成员和成员函数 (Data members and Member functions in C++) "Data Member" and &qu ...
- c++11 bind直接绑定未初始化类的成员函数、类对象的operater()的方法与区别
针对标题的两种情况,使用起来有一定的特殊性,特此记录下. 至于其他常规的bind使用方法,网上有很多文章有介绍,也可以看这篇文章. 标题的两种情况: 情况一: 这个例子用了两个知识: 第一,关于std ...
- c++类对象公有数据成员访问
#include<iostream> using namespace std; class CDate {public:int Date_Year;int Date_Month;int D ...
- 类的静态数据成员和静态成员函数浅析
一.静态数据成员 类中的数据成员声明前加上static,则表示该数据成员为静态数据成员.除了与其他数据具有相同的public/private/protect访问属性外,还有一些其他的属性 ...
- 类的静态数据成员和静态成员函数
一.什么是类的静态成员 静态成员变量和全局变量都存储在全局/静态区,它们都是在程序编译时创建,直到编译结束才被收回.所以全局变量和静态成员变量的功能差不多,只是创建的方式不同,类的静态成员创建在类中, ...
- C++ 常数据成员、常成员函数和常对象
首先给出一个例子简单理解const修饰数据变量的基本工作原理: #include <stdio.h>int main() {const int a = 250;int *ptr = (in ...
- C++:用含成员函数的类来实现输入和输出时间。
题目概述: 用含成员函数的类来实现输入和输出时间. 编程: #include < iostream> using namespace std; class Time //声明Time类 { ...
- 成员函数的选择调用一一常成员函数 (12 分)
成员函数的选择调用一一常成员函数 (12 分) 类中的常对象选择调用常成员函数.语法要点: 如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数, 而不能调用其他成员函数.补充完整复数类的 ...
最新文章
- 十几年后我才知道,嫁了一个硬核老公
- python容器数据类型_python collections 容器数据类型
- Day14作业 二、有两个List集合怎么取两个无重复的并集
- POJ - 2942 Knights of the Round Table(点双缩点+二分图判定)
- box-sizing的使用
- 数据科学家应该学习JavaScript吗?
- java继承test 怎么写_Java Junit Test 要怎么写?
- 机器学习监督学习之分类算法---朴素贝叶斯代码实践
- python游戏引擎-转:十大开源游戏引擎深入比较
- java如何生成jar包
- ARINC429协议芯片DEI1016工作原理
- C语言Case语后是字符串,c语言中的switch case语句
- 多个服务器数据互通_打造生态循环《剑网3:指尖江湖》第二批服务器数据互通...
- 2020华为软件精英挑战赛历程总结——复赛篇
- 初识机器阅读理解(Machine Reading Comprehension)
- android之在app图标添加角标,Android之在app图标添加角标
- android实现阅读器底部菜单,android仿新闻阅读器菜单弹出效果实例(附源码DEMO下载)...
- 万能Ghost系统制作教程
- 反射内存卡读写测试(RFM2gRead和RFM2gWrite)-- C++
- 告别福禄克DTX系列,欢迎dsx2-5000网线测试
热门文章
- 找不到_我的圣诞礼物找不到了!
- hibernate3 hbm2java_hibernate3下hbm2ddl和hbm2java的配置
- c语言输入字符串的格式不正确的是,关于c#:输入字符串的格式不正确
- css 剪辑图片_CSS中的clip-path裁剪图片用法
- html5如何划分区域,10.4 51单片机 RAM 区域的划分
- 上传图片方向不对 php,php-上传图片时出现错误,没有这样的路径或目录
- hadoop删除DataNode节点
- ubuntu下命令行启动vmware某个虚拟机
- 配置Tomcat连接池
- 自然语言处理之词向量技术(二)