C++ 常量成员函数

常函数:类中的成员 函数参数列表后面有const修饰 时,称之为常函数,其主要 作用是为了能够保护类中的成员变量、限制修改。其实可以理解为把 (类*const this)变为(类 const* const this)

 常函数的定义方式:

在()之后, { 之前加个const关键字

void fun()const{}

特性:

        1.不能修改类中的非静态成员,因为 const 修饰 this 指针变为 const 类* const this ,也就是执行 this->变量=val 操作是非法的 不可以修改 成员变量但 可以查看 成员变量。 对于 静态成员属性不但能查看,也能对其修改 ,因为静态成员不是属于对象的,并不在 const 约束范围内。
        2.在 常函数中 可以查看普通的变量、常量、静态变量等,也 可以调用其他 常函数 ,但是却 不能调用普通的成员函数 ,因为其this 指针的类型并不相同,普通成员函数 CTest* const this 常函数 const CTest* const this , 将const CTest* const this 转换成 CTest* const this 这是指针 安全级别降级的非法操作  
        3.但在普通的成员函数中却是可以调用常函数的, 将CTest* const this 转换成 const CTest* const this t 这是一个指针安全级别升级的合法操作。
        4.如果在常函数中想修改部分指定的普通成员,我们可以使用关键字 mutable 来修饰该成员。
class CTest{
    int m_a;
    mutable int m_b;
    void c1()const{
        //m_a = 10; //非法
        m_b = 20; //合法
    }
};

常量成员函数的重载:

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

非常对象既可以调用非常成员函数也可以调用常成员函数优先调用非常成员函数。

class ctest
{
    private:
        int n;
    public:
        ctest() {n=1;}
        //函数重载
        int getvalue() const{return n;}
        int getvalue(){return n*2;}   
};
int main()
{
    const ctest objtest1;//常量对象
    ctest objtest2;//普通对象
    cout<<objtest1.getvalue()<<endl;//1    调用的int getvalue() const{return n;}
    cout<<objtest2.getvalue()<<endl;//2    调用的int getvalue(){return n*2;}
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值