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成员函数吗?

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



猜你喜欢

转载自blog.csdn.net/audience_fzn/article/details/80455236