版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hou09tian/article/details/81669348
可以将C++中类的成员函数声明为常量,这种成员函数叫做常量成员函数(const member function)。
1 声明
将const关键字放在类成员函数的参数列表之后,表示该函数为常量成员函数。
class MyClass
{
public:
int consFunc() const;
private:
int m_MyNum;
};
2 定义
可以在类内定义consFunc()函数,也可以在类外定义。不管是在类内还是类外定义该函数,都要使用关键字const。
int MyClass::consFunc() const
{
return this->m_MyNum;
}
3 含义
在“2定义”中定义的consFunc()函数中,如果不添加const关键字,此时constFunc()是普通的成员函数,此时this的类型是MyClass* const,即this本身是常量,但是其指向的类型是非常量。这就意味着我们不能把this绑定到一个常量对象上。如果要把this绑定到一个常量对象上,必须要把this定义成const MyClass* const,即指向常量的常量。在类成员函数的参数列表之后添加const关键字,就相当于把this定义成const MyClass* const。
4 注意事项
4.1 常量对象必须调用常量成员函数
正如“3 含义”中提到的,如果通过常量对象调用类的成员函数,该成员函数必须是常量成员函数。
4.2 非常量对象可以调用常量成员函数
因为可以将一个非常量赋值给常量,所以非常量对象可以调用常量成员函数。
MyClass myclass;
myclass.consFunc();
4.3 常量成员函数中不能修改成员变量
因为常量成员函数中的this类型是const MyClass* const,所以不能通过this来修改成员变量。
如果consFunc()函数的定义改为如下
int MyClass::consFunc() const
{
return this->m_MyNum++;
}
则此时程序会报错,error C3490: 由于正在通过常量对象访问“m_MyNum”,因此无法对其进行修改。