const修饰成员函数、const对象与non—const对象对于成员的调起规则、位常量和mutable关键字 总结

1.const限制成员函数

  • const区分成员函数

    • 首先,要明白,一个对象一旦被const修饰,eg:const Person p(“ljh”,18);就意味着p是个常量,而常量一般来说是无法调用函数的,但是可以调用const的方法(只能);

    • const可以作为函数重载的条件;

    • non-const对象在既存在non-const的方法又存在const方法时(重载),只能调用non-const版本,在只存在const的版本时,也可以调用;而const对象只能调用const的方法;

    • const方法:返回如果是引用时,如重载[ ],返回string的某个位,那一定要返回const的引用,才能保证和const的对象的身份相一致,而不被修改;鲁棒性更好;

  • const传参的作用

    • 第一个时为了在传递引用的时候,为了只读,加了const

    • 第二个是为了扩大参数的接收范围,既可以接收非const 对象,也可以接收const对象,即便是非const的对象,进入函数后也能保证转变为const的对象;

2.位常量和逻辑常量

  • 当我们书写了一个const的成员函数,这意味着我们需要用const的对象来调用它,const对象的本意是我们不修改它的任何成员,这符合位常量的定义,即不对任何成员进行值的修改;

  • 而我们会有特殊的需求:在const的对象中,且调用const的成员函数时,会修改某些特定的成员属性的值,这时我们需要用到mutable关键字来修饰成员属性,类似于给它开绿灯,让它可以在const的成员函数中可以被修改;

     #include <iostream>
     using namespace std;
     class Person
     {
         friend void test();
     public:
         Person(const string& name, const int& age) :name(name), age(age)
         {
     ​
         }
         void func()const
         {
             //name="yyds";//Error:name在const的成员函数中无法被修改;
             age = 18;    //正确!有mutable关键字修饰,开绿灯了!
         }
     private:
         string name;
         mutable int age;
     };
     void test()
     {
         Person p("ljh", 16);
         cout << "a: " << p.age << endl;
         p.func();
         cout << "a: " << p.age << endl;
     }
     int main(void)
     {
         test();
         return 0;
     }
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值