zoukankan      html  css  js  c++  java
  • [C++] const和mutable关键字使用方法

    const 修饰的变量为常成员变量,表示此变量不能被修改赋值,并且构造函数中只能用初始化列表的方式初始化,其他初始化方式都是错误的

    const 修饰的函数为常成员函数,表示此函数中只能读取成员变量,不能修改成员变量

    const 修饰的对象为常对象,常对象保护了对象中所有的数据成员不能被任何函数访问和修改,只能使用常成员函数来访问。

    如果一个对象被声明为常对象,它只能调用该对象的 const 型成员函数。

    常对象定义格式:

    // 下面两种方式都可以
    const 类名 对象名;
    类名 const 对象名;

    mutable 是为了突破 const 的显示而设置的,被 mutable 修饰的变量,将永远可变,即使在 const 修饰的函数中。

    #include "iostream"
    
    using namespace std;
    
    class Student {
    private:
        const int a;
        const int b = 34;
        int c = 78;
        mutable int d;
    public:
        // 只能用初始化列表的方式初始化常量
        explicit Student(int a) : a(a) {
            // 这种方式初始化常量是错误的
            //this->b = 56;
        }
    
        void print() const {
            // 常成员函数中不能修改成员变量
            //this->c = 78;
            // mutable修饰的变量可以在常成员函数中修改
            this->d = 90;
            cout << a << " " << b << " " << c << " " << d << endl;
        }
    
        void print1() {
            cout << a << " " << b << " " << c << " " << d << endl;
        }
    };
    
    int main(void) {
    
        Student stu1(12);
        stu1.print();
        stu1.print1();
        
        const Student stu2(11);
        // 常对象只能调用常成员函数
        stu2.print();
        // 错误
        //stu2.print1();
    
        return 0;
    }
  • 相关阅读:
    C#深入浅出 修饰符(二)
    HDU 5785 Interesting
    HDU 5783 Divide the Sequence
    HDU 5781 ATM Mechine
    UVA 714 Copying Books
    uva 1471 Defense Lines
    UVA 11134 Fabled Rooks
    UVA 11572 Unique Snowflakes
    UVA 11093 Just Finish it up
    UVA 10954 Add All
  • 原文地址:https://www.cnblogs.com/lialong1st/p/12066937.html
Copyright © 2011-2022 走看看