c++常量成员函数详解

时间:2022-10-29 13:15:21
c++常量成员函数详解/*************************************************
c++常量成员函数详解 *    常量成员函数的含义(成员函数 + const)
c++常量成员函数详解 *                
c++常量成员函数详解 *          在类的 非 常量成员函数中,this指针类型是 X *const(
c++常量成员函数详解 *    针常量),而在 常量成员函数中,this指针类型是const X *const
c++常量成员函数详解 *    不能被修改,这就是常量成员函数和非常量成员函数的区别.
c++常量成员函数详解************************************************
*/

c++常量成员函数详解
//例1
c++常量成员函数详解
class X
c++常量成员函数详解
{
c++常量成员函数详解
private:
c++常量成员函数详解    
static int expensiveOperation();
c++常量成员函数详解    
int *buffer_;
c++常量成员函数详解    
bool isComputed_;
c++常量成员函数详解    
int computedValue_;
c++常量成员函数详解
public:
c++常量成员函数详解    X():buffer_(
0),isComputed_(false)
c++常量成员函数详解    
{}
c++常量成员函数详解    
//...
c++常量成员函数详解
    void setBuffer()
c++常量成员函数详解    
{
c++常量成员函数详解        
int *tmp = new int[MAX];
c++常量成员函数详解        delete[] buffer_;
c++常量成员函数详解        buffer_ 
= tmp;
c++常量成员函数详解    }

c++常量成员函数详解    
void modifyBuffer(int index,int value) const //相当不道德 -_-!
c++常量成员函数详解
    {
c++常量成员函数详解        buffer_[index] 
= value;
c++常量成员函数详解    }

c++常量成员函数详解    
int getValue() const
c++常量成员函数详解    
{
c++常量成员函数详解        
if(!isComputed)
c++常量成员函数详解            computedValue_ 
= expensiveOperation(); //错误
c++常量成员函数详解
        isComputed_ = true//错误
c++常量成员函数详解
    }

c++常量成员函数详解    
return computedValue_;
c++常量成员函数详解}
;
c++常量成员函数详解
c++常量成员函数详解
/*************************************************
c++常量成员函数详解 *    如果我们需要在常量函数中修改类成员怎么办?
c++常量成员函数详解 *           类的非静态变量数据成员可以声明为mutable,这将允许
c++常量成员函数详解 *    它们的值可以被常量成员函数(当然也包括成员函数)所修改.
c++常量成员函数详解************************************************
*/

c++常量成员函数详解
//例2
c++常量成员函数详解
class X
c++常量成员函数详解
{
c++常量成员函数详解
private:
c++常量成员函数详解    
static int expensiveOperation();
c++常量成员函数详解    
int *buffer_;
c++常量成员函数详解    mutable 
bool isComputed_; //注意 mutable
c++常量成员函数详解
    mutable int computedValue_; //注意 mutable
c++常量成员函数详解
public:
c++常量成员函数详解    X():buffer_(
0),isComputed_(false)
c++常量成员函数详解    
{}
c++常量成员函数详解    
//...
c++常量成员函数详解
    void setBuffer()
c++常量成员函数详解    
{
c++常量成员函数详解        
int *tmp = new int[MAX];
c++常量成员函数详解        delete[] buffer_;
c++常量成员函数详解        buffer_ 
= tmp;
c++常量成员函数详解    }

c++常量成员函数详解    
void modifyBuffer(int index,int value) const //相当不道德 -_-!
c++常量成员函数详解
    {
c++常量成员函数详解        buffer_[index] 
= value;
c++常量成员函数详解    }

c++常量成员函数详解    
int getValue() const
c++常量成员函数详解    
{
c++常量成员函数详解        
if(!isComputed)
c++常量成员函数详解            computedValue_ 
= expensiveOperation(); //正确
c++常量成员函数详解
        isComputed_ = true//正确
c++常量成员函数详解
    }

c++常量成员函数详解    
return computedValue_;
c++常量成员函数详解}
;
c++常量成员函数详解
c++常量成员函数详解
/*************************************************
c++常量成员函数详解 *    下面通过操作符的重载来深刻理解常量成员函数
c++常量成员函数详解************************************************
*/

c++常量成员函数详解
//例3
c++常量成员函数详解
class X
c++常量成员函数详解
{
c++常量成员函数详解
public:
c++常量成员函数详解    
//...
c++常量成员函数详解
    int &operator [](int index);  // ①
c++常量成员函数详解
    const int &operator [](int index) const//
c++常量成员函数详解    
//...
c++常量成员函数详解
}
;
c++常量成员函数详解
void main()
c++常量成员函数详解
{
c++常量成员函数详解    
int i = 10;
c++常量成员函数详解    X a;
c++常量成员函数详解    a[
5= i; //重载 ①
c++常量成员函数详解
    const X b;
c++常量成员函数详解    i 
= b[5]; //重载 ②
c++常量成员函数详解
}

c++常量成员函数详解
c++常量成员函数详解
class X
c++常量成员函数详解
{
c++常量成员函数详解
public:
c++常量成员函数详解    X 
operator + (const X &rightArg); //左边的参数是非常量
c++常量成员函数详解
    X operator + (const X &rightArg) const//左边的参数是常量
c++常量成员函数详解
}
;