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。