C++公用数据的保护

1.有const修饰的成员,构造函只能以成员列表方式赋值,只能读取数据成员,不能改变数据成员;

//有const修饰的成员,构造函只能以成员列表方式赋值,只能读取数据成员,不能改变数据成员;
#include<iostream>
using namespace std;
class Time {
public:
	const int hour;
	const int minute;
	const int second;
	Time (int h,int m,int s):hour(h),minute(m),second(s){}
	//有const修饰的成员,构造函只能以成员列表方式赋值
	/*Time(int h,int m,int s) {
		hour = h;
		minute = m;
		second = s;
	}*/
	//错误,只能用成员列表的方式赋值
	void Show() {
		cout << hour << ":" << minute << ":" << second;
	}
};
int main()
{
	Time t(1, 2, 3);
	t.Show();
    //不能改变数据成员
	//t.hour = 10;//错误
	return 0;
}

  

2.在类的成员函数后面加 const,常函数,只能引用不能改变成员变量的值,可以被const对象调用。

//在类的成员函数后面加 const,常函数,只能引用不能改变成员变量的值,可以被const对象调用。
#include<iostream>
using namespace std;
class Time {
private:
	int hour;
	int minute;
	int second;
public:
	Time(int h, int m, int s) {
		hour = h;
		minute = m;
		second = s;
	}
	void fun()const {
		//只能引用
		cout << hour << ":" << minute << ":" << second << endl;
		//不能改变成员变量的值
		//minute = 0;//错误
	}
	void Show() {
		cout << hour << ":" << minute << ":" << second << endl;
	}
};
int main()
{
	const Time t(10,11,12);
	//可以被const对象调用
	t.fun();
	//不可以被非const对象调用
	//t.Show();//错误,该函数是非const函数,常对象只能调用const函数
	return 0;
}

 

3.const修饰对象 叫常对象,只能调用const成员函数,无法调用非const成员函数。

//3.const修饰对象 叫常对象,只能调用const成员函数,无法调用非const成员函数。
#include<iostream>
using namespace std;
class Time {
private:
	int hour;
	int minute;
	int second;
public:
	Time(int h, int m, int s) {
		hour = h;
		minute = m;
		second = s;
	}
	void fun()const {
		cout << hour << ":" << minute << ":" << second << endl;
	}
	void Show() {
		cout << hour << ":" << minute << ":" << second << endl;
	}
};
int main()
{
	const Time t1(10,11,12);//常对象
	//常对象可以被const对象调用
	t1.fun();
	//常对象不可以被非const对象调用
	//t1.Show();//错误,该函数是非const函数,常对象只能调用const函数

	Time t2(20, 21, 22);//非常对象
	//非常对象可以被const对象调用
	t2.fun();
	//非常对象可以被非const对象调用
	t2.Show();
	return 0;
}

 PS:总结

数据成员非const的普通成员函数const成员函数
非const的普通数据成员可以引用,也可以改变值可以引用,但不可以改变值
const数据成员可以引用,但不可以改变值可以引用,但不可以改变值
const对象不允许引用可以引用,但不可以改变值4

4.mutable 修饰变量可以改变。

//4.mutable 修饰变量可以改变。
#include<iostream>
using namespace std;
class Time {
private:
	//定义mutable变量
	mutable int hour;
	int minute;
	int second;
public:
	Time(int h,int m,int s) {
		hour = h;
		minute = m;
		second = s;
	}
	void Show()const {
		//const函数中,mutable修饰的变量可以修改
		hour = 20;
		//const函数中,非mutable修饰的变量不可以修改
		//second = 6;//错误
		cout << hour << ":" << minute << ":" << second << endl;
	}
};
int main() {
	Time t(1,2,3);
	t.Show();
	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白凤倚剑归

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

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

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

打赏作者

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

抵扣说明:

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

余额充值