8.8.2 const与成员函数

    第7章已经介绍了const在函数中的应用,实际上,const在类成员函数中还有种特殊的用法,把const关键字放在函数的参数表和函数体之间(与第7章介绍的const放在函数前修饰返回值不同),称为const成员函数,其基本定义格式如下所示。

    (1)类内定义时如下所示。


    类型函数名(参数列表)const { 函数体 }

    (2)在类定义之外定义时,共分两步:

    ❑类内声明时如下所示。


    类型函数名(参数列表)const;❑类外定义时如下所示。 类型类名:函数名(参数列表)const { 函数体 }

    注意

    类外定义的实现同样需要关键字const,否则编译器会把其看成一个不同的函数。

    const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。如果const成员函数试图以任何方式改变类的数据成员或调用另一个非const成员函数,编译器将给出错误信息,如代码8.19所示。

    代码8.19 const成员函数ConstFuncMember


    <————————————————文件名:point.h——————————————> 01 #include<iostream> 02 using namespace std; 03 class point 04 { 05 int x;//默认为private的数据成员x和y 06 int y; 07 public: 08 point(int xp=0,int yp=0)//构造函数 09 { 10 x=xp; 11 y=yp; 12 } 13 void print()const//const成员函数内无法修改数据成员,否则编译器报错 14 { 15 x=5;//试图修改x将引发编译器报错 16 cout<<"x:"<<x<<",y:"<<y<<endl; 17 } 18 }; <———————————-文件名:example819.cpp———————————————-> 19 #include"point.h" 20 int main() 21 { 22 point pt;//声明类对象,以默认参数形式调用构造函数 23 pt. print();//调用const成员函数 24 return 0; 25 }

    【代码解析】将代码8.19编译并链接,系统提示代码第15行语句“x=5;”错误,在const成员函数print()内不能对类中的数据成员进行修改。

    注意

    任何不修改成员数据的函数都应该声明为const函数,这样有助于提高程序的可读性和可靠性。