const成员函数及其权限

const成员函数:在成员函数后加const,const修饰this指针指向的对象,这也就保证调用这个const成员函数的对象在内部不会被改变

    

首先我们要搞懂const放在不同的位置,它修饰的是谁

int main()
{
	char* a = "hello";
	char* b = "bit";
	const char* p1 = a;
	char const *p2 = a;
	char* const p3 = a;

	p1 = b;           //const修饰的是*p1,所以p1可以改变
	//*p1 = "lucy";   //但是p1指向的内容(即*p1 )不能改变

	p2 = b;           //const修饰的是*p2,所以p2可以改变
	//*p2 = "lucy";   //但是p2指向的内容(即*p2)不能改变

	//p3 = b;        //const修饰的是p3,所以p3不能被改变
	if (*p3==NULL)
	*p3 = *b;         //但是p3指向的内容可以被改变(即*p3)  
	system("pause");
	return 0;
}

非const对象调用非const成员函数,constant对象调用const成员函数


思考:

1. const对象可以调用非const成员函数和const成员函数吗?

2. 非const对象可以调用非const成员函数和const成员函数吗?

class Date
{
public:
	Date(int year, int month, int day)
		:_year(year)
		, _month(month)
		, _day(day)
	{}
	void Display1()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
	void Display2() const
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1(2018, 1, 1);
	d1.Display1();    //非const对象,调用非const成员函数
	d1.Display2();    //非const对象,调用const成员函数
	const Date d2(2018, 1, 1);
	//d2.Display1();   //const对象,不能调用非const成员函数
	d2.Display2();     //const对象,可以调用const成员函数
	system("pause");
	return 0;
}

答:1.const对象,不能调用非const成员函数,const对象,可以调用const成员函数

       2.非const对象,可以调用非const成员函数,非const对象,可以调用const成员函数

权限可以放大但不能缩小,const相当于只拥有读权限,非const拥有读写的权限

3. const成员函数内可以调用其它的const成员函数非const成员函数吗?

4. 非const成员函数内可以调用其它的const成员函数非const成员函数吗?

答:可以,不可以,可以,可以



  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值