C++类中的const

const和C++的类纠缠很深。C++语言是很严谨的语言,对各种情况考虑的很全面,而const限定符可以实现权限限定,这个和严谨的C++语言不谋而合。const在C++中用处很多,本篇章只讲解它和类的用法。

const修饰成员数据

const修饰的成员数据定义以后不能被修改,这样可以保护该数据。

代码:

#include <iostream>

using namespace std;

class Man {
public:

	// 使用初始化列表来初始化a的值,初始化列表只能出现在构造函数中
	Man(int c):a(c) {

	}

	// 1、错误的const数据成员定义以后不可以再修改
	// Man(){
	// 	a = 12;  
	// }

private:
	const int a;  // C++11才支持类内初始化
	static const int d = 11;  // const修饰的静态数据成员只能在这里初始化,并且以后不能再修改
};

int main() {


}

结论:

1、const成员数据可以在类内中初始化,但是标准要是C++11。
2、const成员数据可以通过构造函数的初始化列表来初始化,初始化列表只有构造函数才有。
3、const成员数据定义以后不允许再修改,初始化只有通过类内初始化或者构造函数的初始化列表。
4、const静态成员数据只能类内初始化,并且以后不能再修改。

const修饰的成员函数

const修饰的成员函数主要是用来给const修饰的对象调用的。所以如果成员函数不修改成员数据,尽量定义成const成员函数。const函数不可以修改成员数据。

代码:

#include <iostream>

using namespace std;

class Man {
public:

	Man() {
	}

	~Man() {

	}

	void test1() {

	}

	void test2 () const {
		 // a = 10; const成员函数不允许修改数据成员
	}

private:
	int a;
};

int main() {
	// 普通成员对象也可以访问到被const修饰的成员函数
	Man man1;
	man1.test2();

	// const对象只能访问到被const修饰的成员函数
	const Man man2;
	man2.test2();

	return 0;
}

普通成员对象也可以访问到被const修饰的成员函数
const对象只能访问到被const修饰的成员函数
总结:

1、const对象只能访问const修饰的成员函数
2、const成员函数不能修改成员数据
3、普通对象可以访问const修饰的成员函数

const在参数传递中的坑(C++语法严谨的体现)

普通对象:Man man1;
const修饰的对象:const Man man2;
普通引用对象:Man& man3;
const引用对象:const Man& man4;

普通引用对象,可以引用普通对象。
const引用对象,可以引用普通对象和const对象。

理解的知识点,永远比记忆来的长久。
如何去理解呢?
你可以给对象起别名,但是我这对象本身是不可修改的。你拿到以后你也是不可以修改。
我传给你这个对象本身可以修改,那么你引用拿到以后,修改和不修改都随你,因为该对象本身没有去限定权限。

代码:

#include <iostream>
using namespace std;

class Man {
public:
	int getNum() const {
		return num;
	};

private:
	int num = 11;

};


// const Man & man可以引用man或者  const Man man
void test1(const Man & man) {  

}

// Man & man 不能引用 const Man man
void test2( Man& man) { 

}

int main() {
	Man man1;
	const Man man2;
	
	test1(man1);
	test1(man2);

	test2(man1);
	test2(man2);  // 这是不允许的会报错

	return 0;
}
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

划水猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值