C++中的const成员变量和成员函数

在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。

const成员变量

const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。

const成员函数(常成员函数)

const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。

我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数。

常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字,请看下面的例子:

arduino 复制代码
    class Student{
    public:
        Student(char *name, int age, float score);
        void show();
        //声明常成员函数
        char *getname() const;
        int getage() const;
        float getscore() const;
    private:
        char *m_name;
        int m_age;
        float m_score;
    };
    Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
    void Student::show(){
        cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
    }
    //定义常成员函数
    char * Student::getname() const{
        return m_name;
    }
    int Student::getage() const{
        return m_age;
    }
    float Student::getscore() const{
        return m_score;
    }

getname()、getage()、getscore() 三个函数的功能都很简单,仅仅是为了获取成员变量的值,没有任何修改成员变量的企图,所以我们加了 const 限制,这是一种保险的做法,同时也使得语义更加明显。

需要强调的是,必须在成员函数的声明和定义处同时加上 const 关键字。char *getname() constchar *getname()是两个不同的函数原型,如果只在一个地方加 const 会导致声明和定义处的函数原型冲突。

最后再来区分一下 const 的位置:

  • 函数开头的 const 用来修饰函数的返回值,表示返回值是 const 类型,也就是不能被修改,例如const char * getname()
  • 函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const
相关推荐
uzong25 分钟前
一次慢接口背后,竟藏着40+种可能!你中过几个
后端·面试·程序员
倔强青铜三2 小时前
苦练Python第66天:文件操作终极武器!shutil模块完全指南
人工智能·python·面试
倔强青铜三2 小时前
苦练Python第65天:CPU密集型任务救星!多进程multiprocessing模块实战解析,攻破GIL限制!
人工智能·python·面试
怪兽20142 小时前
SQL优化手段有哪些
java·数据库·面试
第七种黄昏6 小时前
前端面试-箭头函数
前端·面试·职场和发展
沐怡旸7 小时前
【算法】725.分割链表--通俗讲解
算法·面试
沐怡旸7 小时前
【底层机制】【Android】深入理解UI体系与绘制机制
android·面试
文心快码BaiduComate8 小时前
代码·创想·未来——百度文心快码创意探索Meetup来啦
前端·后端·程序员
渣哥8 小时前
面试官最爱刁难:Spring 框架里到底用了多少经典设计模式?
javascript·后端·面试
代码充电宝8 小时前
LeetCode 算法题【简单】20. 有效的括号
java·算法·leetcode·面试·职场和发展