C++_const 常量成员以及成员初始化列表及其常量类

Posted 木杉乀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++_const 常量成员以及成员初始化列表及其常量类相关的知识,希望对你有一定的参考价值。

常量成员以及成员初始化列表

1.知识点介绍

常量成员,指的是在C++类中声明对象成员时可以加上const关键字,这样声明的成员叫常量成员,
常量成员分为常量数据成员和常量函数成员

2.常量数据成员

  1. 定义

    class node
    {
    public:
    	const int id; // 用const修饰, id成员变量不能被改值;
    }
    int main()
    {
        CA a;
        a.id = 10;	// 报错!! 由于被const修饰, id值不能改变
    }
    
  2. 初始化

    可以在定义的时候直接在后面赋值(不建议使用)

    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 常量成员以及成员初始化列表及其常量类的主要内容,如果未能解决你的问题,请参考以下文章

C++_const 常量成员以及成员初始化列表及其常量类

C++ const常量成员函数

const成员变量

C++ staticconst和static const 以及它们的初始化

noobSTL-1-配置器-1

我可以在C ++中的运行时初始化静态const成员吗?