【C++入门】const 成员函数

文章目录

  • 一、基本概念
  • 二、经典问题
  • 三、使用建议

一、基本概念

const 修饰的成员函数就称作 const 成员函数。

例子:

class Date
{
public:
	void Display() const
	{
		...
	}

private:
	int _year;
	int _month;
	int _day;
};

事实上,const 成员函数的这个 const 修饰的是 *this,也就是调用该成员函数的对象,因此在 const 成员函数内不能修改类的成员。
【C++入门】const 成员函数_第1张图片

二、经典问题

来看下面几个问题:

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

不行,const 对象调用成员函数,传给 this 形参的是 const 对象的地址,而非 const 成员函数的 this 形参是普通对象的地址,这属于权限放大,是不合法的。

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

可以,非 const 对象调用成员函数,传给 this 形参的是普通对象的地址,而 const 成员函数的 this 形参是 const 对象的地址,这属于权限缩小,是合法的。

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

不行,权限放大。

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

可以,权限缩小。

注意,权限可以平移、可以缩小,但是不能放大。

三、使用建议

但凡函数体内不修改成员的成员函数,都用 const 修饰。

因为 const 对象可以调用 const 成员函数(权限平移),普通对象也可以调用 const 成员函数(权限缩小);而 const 对象不能调用非 const 成员函数(权限放大)。

你可能感兴趣的:(C++入门,c++,开发语言)