C++学习笔记 const修饰类成员与成员函数
2021/7/13 22:09:29
本文主要是介绍C++学习笔记 const修饰类成员与成员函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、 常数据成员
常数据成员,已经初始化就不可以改变
1 const int m; //const 数据类型 数据成员名 2 int const s; //数据类型 const 数据成员名
被const修饰的成员必须进行初始化,并且不能被更改。而初始化的方式则是在类的构造函数的初始化列表里进行的。
1 class Clock 2 3 4 Clock(int a,int b,int c):h(a),m(b),s(c)//类的构造函数的初始化列表
通常把常数据成员定义为静态成员,使其成为类的一个常量
1 private: static const int x; //静态常量类内申明,类外初始化
其中x为static类型,因其静态化的特殊性,需要在类外初始化,即便为私有类型;
二,常成员函数
const成员函数可以使用类中的所有成员变量,但是不能修改他们的值,这种措施主要为了保护数据而设置。const成员函数也称常成员函数。
需要在声明和定义的时候在函数头部的结尾加上const关键字
1 char *getname() const; 2 int getage() const; 3 float getscore() const;
常成员函数只能调用常成员函数,而不能调用非常成员函数,访问但不可以更改非常成员变量。
注意:但是有一种情况例外,如果成员申明时加关键字mutable后,在常函数中依然可以修改
三,常对象
常对象是指该对象在其生命周期内,其所有的数据成员的值都不能被改变;定义对象时加上关键字const,该对象就是常对象,其一般形式如下:
1 const class object(params); 2 class const object(params); 3 4 5 //定义const指针 6 const class *p = new class(params); 7 class const *p = new class(params);
一旦将对象定义为常对象之后,不管是哪种形式,该对象就只能访问被 const 修饰的成员了(包括 const 成员变量和 const 成员函数),因为非 const 成员可能会修改对象的数据(编译器也会这样假设),C++禁止这样做。
数据成员 | 非const的普通成员函数 | const成员函数 |
---|---|---|
非const的普通数据成员 | 可以引用,也可以改变值 | 可以引用,但不可以改变值 |
const数据成员 | 可以引用,但不可以改变值 | 可以引用,但不可以改变值 |
const对象 | 不允许 | 可以引用,但不可以改变值 |
注意:1,不要误认为常对象中的成员函数都是常成员函数,常对象只保证其所有数据成员的值不被修改
2,如果在常对象中成员函数未加const声明,则编译系统会把它当最非const成员函数处理
3,常成员函数不能调用另外一个非const成员函数
这篇关于C++学习笔记 const修饰类成员与成员函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享