C++ const修饰类的成员函数

将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

使用方法:直接在要修饰的成员函数后面加const。

class A
{
public:
	//this的指向不能发生改变 
	void setA(int b) //this: A* this const  
	{
		_a = b;
	}

	//const修饰成员函数
	//this的指向不能发生改变,所指向的内容也不能改变
	int getA() const  //this: const A* this const  
	{
		return _a;
	}

private:
	int _a;
};

问题:

1. const对象可以调用非const成员函数吗? 不能
C++ const修饰类的成员函数_第1张图片不能。因为const对象中的属性值不能发生改变,调用非const成员函数setA会导致对象的内容发生改变,编译器就会报错。const对象拥有只读权限,非const成员函数拥有可读可写权限,会将权限放大,不能调用。

2. 非const对象可以调用const成员函数吗? 可以
C++ const修饰类的成员函数_第2张图片可以。因为a对象中的内容可读也可以修改,而const修饰的成员函数只能读取数据,满足a对象的权限,所以可以调用。从a对象的可读可写到成员函数的只读,权限缩小,可以调用。

3. const成员函数内可以调用其它的非const成员函数吗?不能
C++ const修饰类的成员函数_第3张图片
不能。因为getA中的this只有只读权限,setA中this指针有可读可写权限,getA中的this指针满足不了setA中指针的全部权限。getA中this指针只读到setA中this指针可读可写,权限被放大,不能调用。

4. 非const成员函数内可以调用其它的const成员函数吗? 可以
C++ const修饰类的成员函数_第4张图片
可以。因为setA中的this指针有可读可写权限,getA中的this指针只有只读权限,setA中this指针拥有的权限可以满足getA中this指针的权限。setA中this指针可读可写到getA中this指针只读,权限缩小,可以调用。

总结:

能否调用,主要是看对象权限够不够(读写权限)。权限可以缩小,但不能放大。

你可能感兴趣的:(C++,c++)