C++ const成员变量和成员函数(常成员函数)
在类中,如果你不希望某些数据被修改,可以使用
我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以
常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字,请看下面的例子:
需要强调的是,必须在成员函数的声明和定义处同时加上 const 关键字。
最后再来区分一下 const 的位置:
const
关键字加以限定。const 可以用来修饰成员变量和成员函数。const成员变量
const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。const成员函数(常成员函数)
const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以
get
开头,后跟成员变量的名字,所以通常将它们称为 get 函数。常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字,请看下面的例子:
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() const
和char *getname()
是两个不同的函数原型,如果只在一个地方加 const 会导致声明和定义处的函数原型冲突。最后再来区分一下 const 的位置:
-
函数开头的 const 用来修饰函数的返回值,表示返回值是 const 类型,也就是不能被修改,例如
const char * getname()
。 -
函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如
char * getname() const
。
C语言/C++交流群:664104694(我们会不定期在群内分享C/C++知识,上传C/C++资料)
编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。
通俗易懂,深入浅出,一篇文章只讲一个知识点。
文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。
文章不涉及代码,不烧脑细胞,人人都可以学习。
当你决定关注「编程帮」,你已然超越了90%的程序员!

微信扫描二维码关注
所有教程
- socket
- C#
- Python
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC
- 数据结构
- C语言项目案例
- C++
- OpenCV
- Qt教程
- Unity 3D
- UE4
- STL
- Redis
- JavaScript
- PHP
- HBase
- NoSQL
- MongoDB
- MATLAB
- Markdown
- Android教程
- vi命令
- TCP/IP
- Spring MVC
- Mybatis
- Hibernate
- Spring Boot
- Maven
- Spring Cloud
- Linux
- Linux命令
- Shell
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频