zoukankan      html  css  js  c++  java
  • 【C++札记】const关键字

    C++中const关键字无处不在,我这里做下汇总,作为工具文章方便翻阅。

    一:修饰数据成员

    修饰的成员一单定义初始化后不能再进行修改,如:

    const int a = 10;

    a =20; //重新赋值直接会报错

    当修饰类的成员函数时,先来段错误的代码

    class Student
    {
    public:
        Student(int i)
        {
            this->age = i; //age是const类型直接复制会报错
        }
    private:
         const int age;
    };

    解决上面的错误有两种方法

    方法一:

    使用参数列表的形式(推荐使用)

    class Student
    {
    public:
        Student(int i):age(i)
        {
        }
    
    private:
         const int age;
    };

    方法二:

    定义age时直接赋值

    class Student
    {
    public:
        Student ();
    
    private:
         const int age = 20;
    };

     二:修饰成员函数

    在声明之后,实现体之前

    格式为:

    类型 函数名(参数....) const

    const修饰的成员函数不能修改类中的成员函数,函数中只能调用const修饰的函数。

    class Student
    {
    public:
        Student (int i ):age(i)
        {
    
        }
    
        void update () const
        {
            age = age +1;   //const 修饰的成员函数不能修改类中的成员变量
            display();      //const 修饰的成员函数,函数中只能调用const修饰的成员函数
        }
    
        void display()
        {
            cout << "age:" << endl;
        }
    private:
         int age;
    };

    三:修饰类对象

    const修饰的对象,只能调用const修饰的成员函数

    class Student
    {
    public:
        Student (int i ):age(i)
        {
    
        }
    
        void update () const
        {
            cout << "this is update" << endl;
        }
    
        void display()
        {
            cout << "age:" << endl;
        }
    private:
         int age;
    };
    
    int main()
    {
        const Student stu(30);
        stu.update();
        stu.display();    //const修饰的类对象 只能调用const修饰的成员函数
        return 1;
    }
    

    成员函数有无const修饰可以构成重载,非const对象调用时优先调用非const修饰的成员函数,如不构成重载也可以调用const修饰成员函数。

    class Student
    {
    public:
        Student (int i ):age(i)
        {
    
        }
    
        void display()
        {
            cout << "void display()" << endl;
        }
    
        void display() const
        {
            cout << "display() const" << endl;
        }
    private:
         int age;
    };
    
    int main()
    {
        Student stu(30);
        stu.display();
    
        return 1;
    }

     输出结果:

  • 相关阅读:
    PHP把数组按指定的个数分隔
    主题模型(LDA)(一)--通俗理解与简单应用
    用户活跃度下降40%!七问新浪微博
    天才罗素:知识面横跨哲学 数学和文学 最懂的却是女人
    金刚经---现代解读
    离散数学
    交易已无秘密 一个期货高手的终极感悟
    一位资深交易员的投资感悟(建议收藏)
    F1 score,micro F1score,macro F1score 的定义
    以前曾看到过一个期货童话故事,很有意思,发上来
  • 原文地址:https://www.cnblogs.com/woniu201/p/11694516.html
Copyright © 2011-2022 走看看