三、C++ 常量成员函数

C++ 常量成员函数

一、基本概念

在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数。

常量成员函数执行期间不应修改其所作用的对象。因此,在常量成员函数中不能修改成员变量的值( 静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)。

静态成员变量除外是因为它实际上是全局变量,不属于那个类本身;静态成员函数除外是因为它只能调用静态成员变量,不会修改普通的成员变量的值。

二、程序示例

class Sample
{
    public:
        int value;
        void GetValue() const;
        void func() { };
        Sample() { }
};

void Sample::GetValue() const
{
    value = 0; // wrong
    func(); //wrong
}

int main() {
    const Sample o;
    o.value = 100; //err.常量对象不可被修改
    o.func(); //err.常量对象上面不能执行非常量成员函数
    o.GetValue(); //ok,常量对象上可以执行常量成员函数
    return 0;
} 

三、常量成员函数的重载

两个成员函数,名字和参数表都一样,但一个是const,一个不是,算重载

class CTest {
    private :
        int n;
    public:
        CTest() { n = 1 ; }
        int GetValue() const { return n ; }
        int GetValue() { return 2 * n ; }
};
int main() {
    const CTest objTest1;  //调用常量成员函数
    CTest objTest2;  //调用普通成员函数
    cout << objTest1.GetValue() << "," << objTest2.GetValue() ;

    return 0;
}

四、小结

  1. 常量成员函数不能修改成员变量的值,不能调用非常量成员函数

  2. 常量成员函数可以修改静态成员变量的值,可以调用常量成员函数/静态成员函数

  3. 同函数名同返回值同参数表,一个是const,一个不是,则称为常量成员函数的重载

你可能感兴趣的:(C++,Const,常量成员函数)