Const修饰成员函数

Const修饰成员函数

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

class Date
{
public:
	
	void Display()
	{
		cout << this->_year << "-" << this->_month << "-" << this->_day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1;
	const Date d2;
	d1.Display();
	d2.Display();
	return 0;
}

对于上面的程序,d1调用DisplayDate* this),&d1Date*类型。而&d2的类型是const Date*d2的内容不能被修改,Date*类型可以被修改,类型不匹配,因此调用d2会出错。

要调用const类型的d2,就要让成员函数被const修饰。

void Display1()const 
	{
		cout << this->_year << "-" << this->_month << "-" << this->_day << endl;
	}

该函数可以同时被d1d2调用。d1可以被修改,在被Display()const调用时权限被缩小,不能在该函数内部被修改。由于Display() Display1()const 是两种类型,因此可以同时存在

对于const对象和非const成员函数,有下面几种情况:

1const对象可以调用const成员函数

2)非const对象可以调用非const成员函数;

3Const对象不可以调用非const成员函数;例如:d2.Display();

4)非const对象可以调用const成员函数;d1.Display1();

对于const成员函数与其他const成员函数非const成员函数,有以下几种关系:

class AA

{
public:
	void fun1()
	{ 
		fun2();//this->fun2();
		this->fun1();//情况2
	}
	void fun2(){ }
private:
	int a;
};



class AA
{
public:
	void fun1()
	{ 
		fun2();//情况4
		this->fun1();
	}
	void fun2()const 
	{
		fun1();//情况3,错误
fun2();//情况1
	}
private:
	int a;
};

1const成员函数可以调用const成员函数;

2)非const成员函数可以调用非const成员函数;

3const成员函数不可以调用非const成员函数;

4)非const成员函数可以调用const成员函数;


 




猜你喜欢

转载自blog.csdn.net/lengxinxuexic/article/details/79726628