C++中常量成员函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 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”,因此无法对其进行修改。

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/81669348