C++_const 常量成员以及成员初始化列表及其常量类
2021/5/6 20:25:38
本文主要是介绍C++_const 常量成员以及成员初始化列表及其常量类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
常量成员以及成员初始化列表
文章目录
- 常量成员以及成员初始化列表
- 1.知识点介绍
- 2.常量数据成员
- 3.成员初始化列表
- 4.常量函数成员
- 4.常量对象
1.知识点介绍
常量成员,指的是在C++类中声明对象成员时可以加上const关键字,这样声明的成员叫常量成员,
常量成员分为常量数据成员和常量函数成员
2.常量数据成员
-
定义
class node { public: const int id; // 用const修饰, id成员变量不能被改值; } int main() { CA a; a.id = 10; // 报错!! 由于被const修饰, id值不能改变 }
-
初始化
可以在定义的时候直接在后面赋值(不建议使用)
class node { public: const int id = 10; }
通过成员初始化列表的方式进行初始化
3.成员初始化列表
常量数据成员也在构造函数范围内, 但是常量数据成员值无法改变.
错误示范:
#include<iostream> using namespace std; class CA { public: const int id; CA(){ id = 10; // 报错: 表达式必须是可修改的值 } }; int main() { CA a; cout << a.id << endl; }
采用成员初始化列表对常量数据成员初始化
#include<iostream> using namespace std; class CA { public: int num; const int id; CA(): id(10) {} // 在构造函数之后 + ":" + 初始化内容 CA(int i, int n) : id(i), num(i) // 可以带参初始化列表 {} // 普通数据成员也可初始化 }; // 如果是要给类中的多个数据初始化中间用‘,’号隔开 int main() { CA a, b(15); cout << a.id << endl; cout << b.id << endl; }
初始化列表的特性 1、初始化列表也是实现类中成员数据的初始化的一种方式 2、一些特殊情况下,数据成员的初始化只能用初始化列表的方式给数据成员赋值,而不能在构造函数中 直接赋值 3、初始化列表必须写在构造函数的定义体后面 4、构造函数能对数据的初始化工作,初始化列表也可以,但是初始化列表能做的,构造函数不一定能 5、初始化列表的初始化顺序是按照他们在类中出现的顺序来初始化的,而不是在初始化列表中写的顺序 来初始化的
4.常量函数成员
#include<iostream> using namespace std; class CA { int id = 10; public: void fun() const // 类内定义 { id = 15; // 报错 } void fun1() const; // 类内声明 }; void CA::fun1() const // 类外实现 { }
特点:
类中的常量函数成员, 在这个函数中不能对自身变量进行修改,通过语法限定.
只要是this指针所指向的所有数据都不可以被修改(静态数据可以改变)。
可以用来帮助我们来限定自身.
4.常量对象
class CA { int id = 10; }; int main() { const CA a; a.id = 10; // 报错 }
常量对象声明, 在生成对象前面加上 const修饰.
常量对象中的任何数据成员都不能改变, 只能调用对象中的常量函数成员.
这篇关于C++_const 常量成员以及成员初始化列表及其常量类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版