C++ const类成员函数

一,常量成员函数的定义

在函数声明的后面加上const,就定义了一个常量成员函数,例如:

class List{
private:
    int length;
    int weight;
public:
    List(int l, int w){
        length = l;
        weight = w;
    }
    int getLength() const;   //常成员函数
    int getWeight();         //非常成员函数
};

在类外定义成员函数时,也要加上const关键字

int List::getLength() const{  //类外定义也要加上const关键字
    return length;
}
如果在常量成员函数中修改对象的数据成员,编译时会出错

int List::getLength() const{  
    return length ++;
}

 

二,常量成员函数的作用
const成员函数存在的意义在于它能被const常对象调用,而且常对象只能调用常成员函数。

const List list1(10, 10);   //定义一个常对象
list1.getLength();          //常对象调用常量成员函数
常对象不能调用非常成员函数,不然在编译时会出错

const List list1(10, 10);   //定义一个常对象  
list1.getWeight();          //常对象调用非常成员函数,在编译时会出错
非常对象可以调用常成员函数

List list1(10, 10);  //定义一个非常对象
list1.getLength();   //非常对象调用常成员函数


三,如何让一个const成员函数具有修改对象数据成员的能力

有些时候,我们却必须要让const函数具有修改某个成员数据值的能力。比如一些内部的状态量,对外部用户无所谓,但是对整个对象的运行却大有用处。遇到这种问题,我们可以把一个成员数据定义为mutable(多变的),它表示这个成员变量可以被const成员函数修改却不违法,例如:

class List{
private:
     mutable bool is_valid;
public:
    void checkList() const{
        if(is_valid){
            is_valid = false;
        } else {
            is_valid = true;
        }
    }
};


版权声明:本文为cloud323原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。