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

const成员变量

const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表。

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过日志恢复oracle序列,(存档日志包含序列84,要求序列36)怎么恢复啊?

(存档日志包含序列84&#xff0c;要求序列36)怎么恢复啊&#xff1f;SQL> startup mount;ORACLE 例程已启动Total System Global Area 135338868 bytesFixed Size 453492 bytesVariable Size 109051904 bytesDatabase Buffers 251…

C++ const对象

C 中&#xff0c;const 也可以用来修饰对象&#xff0c;称为常对象。一旦将对象定义为常对象之后&#xff0c;就只能调用类的 const 成员&#xff08;包括 const 成员变量和 const 成员函数&#xff09;了。 定义常对象的语法和定义常量的语法类似&#xff1a; const class …

lvs工作在第几层_LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)...

目录lvs的调度算法lvs的四种模式四层均衡负载和七层的区别1、lvs调度算法(最常用的四种)轮叫调度(rr)调度器通过外部请求的顺序轮流分配到集群中的真实服务器上&#xff0c;对每台服务器都是均等的&#xff1b;但是这样调度器不会考虑服务器上实际的连接数和系统负载&#xff0…

linux 常用头文件,(常用头文件详解.doc

(常用头文件详解linux常用头文件详解POSIX标准定义的头文件??????? 目录项???????? 文件控制??? 文件名匹配类型??? 路径名模式匹配类型??????? 组文件??? 网络数据库操作??????? 口令文件??? 正则表达式??????? TAR归档值??…

a as as big rat_超好玩!12句英语绕口令,你能一口气读完几句?

绕口令(tongue twister)是一种语言游戏&#xff0c;它是将发音相同、相近等容易混淆的字组成拗口的句子&#xff0c;要求朗读者一口气快速念完而且不能出错&#xff0c;极具趣味。相信很多同学都玩过&#xff0c;假如绕口令也有段位划分的话&#xff0c;你是什么段位&#xff1…

C++ friend关键字

friend 的意思是朋友&#xff0c;或者说是好友&#xff0c;与好友的关系显然要比一般人亲密一些。我们会对好朋友敞开心扉&#xff0c;倾诉自己的秘密&#xff0c;而对一般人会谨言慎行&#xff0c;潜意识里就自我保护。在 C 中&#xff0c;这种友好关系可以用 friend 关键字指…

linux vps 运行exe文件夹,linux 64位下安装wine1.6 Windows模拟器(用来运行.exe文件) 编译安装32位wine...

cdyum groupinstall Development Tools -yyum install libX11-devel freetype-devel -ywget http://prdownloads.sourceforge.NET/wine/wine-1.6.tar.bz2tar -jvxf wine-1.6.tar.bz2cd wine-1.6编译之前先安装32位运行库不然不能编译:yum install alsa-lib-devel.i686 libsndfi…

python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...

本文将带你了解软件测试技术之如何用python在Windows系统下&#xff0c;生成UNIX格式文件&#xff0c;希望对大家学测试技术有所帮助如何用python在Windows系统下&#xff0c;生成UNIX格式文件平时测试工作中&#xff0c;少不了制造测试数据。最近一个项目&#xff0c;我就需要…

C++ class和struct的区别

C中的 struct 和 class 的区别&#xff1a; 1 . 使用 class 时&#xff0c;类中的成员默认都是 private 属性的&#xff1b;而使用 struct 时&#xff0c;结构体中的成员默认都是 public 属性的。 2 . class 继承默认是 private 继承&#xff0c;而 struct 继承默认是 public …

linux 宽字符串,C语言中的多字节字符与宽字符

C语言原本是在英文环境中设计的&#xff0c;主要的字符集是7位的ASCII码&#xff0c;8位的byte(字节)是最常见的字符编码单位。但是国际化软件必须能够表示不同的字符&#xff0c;而这些字符数量庞大&#xff0c;无法使用一个字节编码。C95标准化了两种表示大型字符集的方法&am…

step7db块寻址_step7 根据db地址块怎样找I/O点

楼主是想在数据块DB中查找呢还是想在FC/FB或OB块中查找呢&#xff1f;如果是在数据块DB中查找&#xff0c;打开希望查找的数据块&#xff0c;例如打开数据块DB9&#xff0c;看地址处是1940的数据就是你需要找的DB9.DBD1940。如图1所示。如果是想查找FC/FB或OB块中DB9.DBD1940这…

vue 获取元素下的所有div_vue获取dom元素高度的方法

获取高度&#xff1a;要在钩子mounted里面dom结构生成后去获取dom的高度&#xff0c;宽度&#xff0c;修改样式等操作&#xff01;&#xff01;&#xff01;mounted() {let h window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; //…

execl执行linux命令,execl执行Linux命令

相关函数&#xff1a;execle, execlp, execv, execve, execvp1.表头文件&#xff1a;#include 2.函数定义&#xff1a;int execl(const char *path, const char *arg, ...);execl()用来执行参数path字符串所代表的文件路径&#xff0c; 接下来的参数代表执行该文件时传递的argv…

C++函数编译原理和成员函数的实现

C函数的编译 C中的函数在编译时会根据命名空间、类、参数签名等信息进行重新命名&#xff0c;形成新的函数名。这个重命名的过程是通过一个特殊的算法来实现的&#xff0c;称为 名字编码&#xff08;Name Mangling&#xff09;。 Name Mangling 是一种可逆的算法&#xff0c;…

linux 运行选择哪个cpu核,判断Linux进程在哪个CPU核运行的方法

问题&#xff1a;有一个Linux进程运行在多核处理器系统上&#xff0c;如何查看该进程运行在哪个CPU上&#xff1f;方法一&#xff1a;ps 命令可以告诉你每个进程/线程目前分配到的(在“PSR”列)CPU ID。ps -o pid,psr,comm -p 运行结果&#xff1a;PID PSR COMM5357 10 prog输…

laravel 任务队列_laravel队列-让守护进程处理耗时任务

待解决的问题最近在做一个服务器集群管理的web项目&#xff0c;需要处理一些极其耗时的操作&#xff0c;比如磁盘格式化分区。对于这个需求&#xff0c;最开始的想法是&#xff0c;为了让节点上的rpc(远程过程调用) service端尽可能简单(简单到只需要popen执行一条指令即可&…

C++对象数组

对象数组是什么 数组对象就是大批量实例化对象的一种方法&#xff0c;例如&#xff1a;Student stu 实例化对象&#xff0c;如果有好几百个对象应该怎么办&#xff1f;这时候就用到了对象数组&#xff0c;顾名思义&#xff0c;就是吧所有要实例化的对象都放到一个组里面&#…

镜像安装linux选择内核版本,在CentOS和Ubuntu中安装Linux Kernel 4.13.10

Linus Torvalds 在 10 月 17 日星期五正式发布了稳定版 Linux Kernel 4.13.10&#xff0c;这个最新版本发布了新功能&#xff0c;进行了诸多修复和问题改进。下面将向大家介绍在 CentOS 和 Ubuntu 中手动安装、更新 Linux Kernel 4.13.10 的方法&#xff0c;当然&#xff0c;这…

C++成员对象和封闭类

有其他类的对象作为 成员对象的类叫封闭类。 任何生成封闭类对象的语句&#xff0c;都要让编译器明白&#xff0c;对象中的成员对象&#xff0c;是如何初始化的。 具体做法是通过封闭类的构造函数的初始化列表。 封闭类对象生成时&#xff0c;先执行所有对象成员的构造函数&a…

linux设备进入睡眠所需时间,android linux 休眠 深度睡眠 查看 方法 调试【转】

在Android移动设备中&#xff0c;有时按下Power键(未接电源&#xff0c;USB)时&#xff0c;因其它apk程序获取了wake_up锁未释放或程序BUG导致未释放&#xff0c;造成未能进入深度睡眠&#xff0c;从而加大了耗电量&#xff0c;减少了待机时间&#xff0c;参考如下图&#xff0…