常量成员,指的是在C++类中声明对象成员时可以加上const关键字,这样声明的成员叫常量成员, 常量成员分为常量数据成员和常量函数成员
常量数据成员也在构造函数范围内, 但是常量数据成员值无法改变.
错误示范:
#include
using namespace std;
class CA {
public:
const int id;
CA(){
id = 10; // 报错: 表达式必须是可修改的值
}
};
int main()
{
CA a;
cout << a.id << endl;
}
采用成员初始化列表对常量数据成员初始化
#include
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、初始化列表的初始化顺序是按照他们在类中出现的顺序来初始化的,而不是在初始化列表中写的顺序
来初始化的
#include
using namespace std;
class CA {
int id = 10;
public:
void fun() const // 类内定义
{
id = 15; // 报错
}
void fun1() const; // 类内声明
};
void CA::fun1() const // 类外实现
{ }
特点:
类中的常量函数成员, 在这个函数中不能对自身变量进行修改,通过语法限定.
只要是this指针所指向的所有数据都不可以被修改(静态数据可以改变)。
可以用来帮助我们来限定自身.
class CA {
int id = 10;
};
int main()
{
const CA a;
a.id = 10; // 报错
}
常量对象声明, 在生成对象前面加上 const修饰.
常量对象中的任何数据成员都不能改变, 只能调用对象中的常量函数成员.