跳转至

05常量

const对象和const成员函数

const成员函数

class X
{
    int i;
public:
    X(int ii);
    int f() const;
    int f2();
};

X::X(int ii) : i(ii){}

int X::f() const
{
    return i;
}

int X::f2()
{
    i++;
    return i;
}

成员函数用const修饰,就不能对成员变量进行修改。

对数据进行的修改的成员函数,不能用const。不然会报错。

const对象

类可以创建const对象。

const对象里面的数据不允许被修改

编程中如果不使用const对象 那么类就不需要const成员函数。

如果使用了const对象,因为不知道成员函数是否对数据进行了修改,所以必须指定const修饰函数。

类不知道创建的对象是否是const,所以创建类的时候,就把成员函数该加const的就加上,能加的就加,这样使用这个类的时候,创建对象可以const可以非const。

const对象只能调用const函数。不能调用非const成员函数

根本原因就是数据能修改不能修改的问题。

非const对象可以调用const函数。也可以调用非const。

const成员函数 想要对数据进行修改

C语言 通过this指针转变成非const,对数据进行修改。

C++ 同理 都是通过转型。

class Y {
    int i;
    mutable int j;//后来的C++通过mutable 修饰的成员变量 在const成员函数中就可以修改。
public:
    Y();
    void f() const;
};

Y::Y() { i = 0; }

void Y::f() const
{
//    i++;//会报错
    //下面两个都是通过转型
    ((Y*)this)->i++;//C
    (const_cast<Y*>(this))->i++;//C++

    j++;
}

const成员函数,const是写在函数后面。

写在前面的 函数返回值是const。