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;
    }

     输出结果:

  • 相关阅读:
    SplitViewController的简单使用
    ViewController容器
    AnchorPoint 和Position 关系
    __OSX_AVAILABLE_BUT_DEPRECATED
    __OSX_AVAILABLE_STARTING
    UIButton重复点击,重复触发,怎么办
    iOS小技巧:用runtime 解决UIButton 重复点击问题
    FOUNDATION_EXPORT 或#define 或 extern
    nginx第一天
    053-001
  • 原文地址:https://www.cnblogs.com/woniu201/p/11694516.html
Copyright © 2011-2022 走看看