C++_const 常量成员以及成员初始化列表及其常量类
Posted 木杉乀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++_const 常量成员以及成员初始化列表及其常量类相关的知识,希望对你有一定的参考价值。
常量成员以及成员初始化列表
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 常量成员以及成员初始化列表及其常量类的主要内容,如果未能解决你的问题,请参考以下文章