C++基础——const成员函数

2023-11-20

 

目录

一.Const成员函数      

1.定义:

2.格式:

3.代码示例:

.h文件:

definition.cpp文件 

 特性:

例:

那么const对象既可以调用非const型成员函数吗?

问题3.const成员函数内可以调用其它的非const成员函数吗?

问题4. 非const成员函数内可以调用其它的const成员函数吗?

总结:


一.Const成员函数      

1.定义:

        将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,表明在该成员函数中不能对类的任何成员进行修改

        const修饰成员函数的时候,const需要放在成员函数的后面,不能放在一开始,,若是放在一开始的话,那么const修饰的是函数的返回值,而非是修饰成员函数了。

2.格式:

        返回值类型 函数名称 ( ) const {

                //函数体.....

                                }

3.代码示例:

.h文件:

class Date {
public:
	//构造函数不可以使用const修饰,构造函数若加了const就不能初始化值了
	Date(int year = 1199, int month = 12, int day = 15);

	void Print() const;

	void Reset1()const;
	void Reset2();
	void Reset3()const;
private:
	int _year;
	int _month;
	mutable int _day;
};

definition.cpp文件 

Date::Date(int year, int month, int day) {
	_year = year;
	_month = month;
	_day = day;
}
void Date::Print() const{
	cout << _year << "-" << _month << "-" << _day << endl;
}

void Date:: Reset1()const {	
	_day = 1;		
	_month = 2;
	_year = 1970;
}

void Date::Reset2() {	
	_day = 1;
	_month = 2;
	_year = 1970;
}

void Date:: Reset3()const {
	this->_day++;
}

 

 

 特性:

const修饰的成员函数:实际上修饰的是this指针指向空间的内容不可被修改
有了const修饰的成员函数,其this指针类型:const Date* const  (左定值,右定向)

而普通的成员函数:可以修改成员变量 ,其this指针类型:Date* const

 

例:

int main() {
	Date d1(2022, 9, 9);
	d1.Print();
	d1.Reset2();
	d1.Print();
	return 0;
}

  解析:d1是Date类型,可读可写,Reset函数可读可写,而Print函数仅可读,表明非const对象既可以调用const型成员函数,也可以调用非const型成员函数。 这是权限的平移和缩小。

 

那么const对象既可以调用非const型成员函数吗?

         同样的,权限小的是不能调用权限大的!!! 

 

问题3.const成员函数内可以调用其它的非const成员函数吗?

       不可以,若你把一个函数声明为const类型函数,那么就说明这个函数是只读的,不可修改,
而非const成员函数是可读可写的。

问题4. 非const成员函数内可以调用其它的const成员函数吗?

        可以,外层函数类型Date* const:是可读可写的,而内层函数类型是const Date* const:只读
外层可以修改也可以不修改,到底是否要修改,视情况而定。

总结:

        到底要不要使用const去修饰成员函数,就看你函数中的变量需不需被修改,如果不希望被修改,则加上即可。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++基础——const成员函数 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • display和visibility的区别

  • 微信小程序-日期时间选择器

    我在官方表单组件的基础上改出了几种比较常用的日期 时间 选择器 为了更清晰 我没给任何样式 wxss可根据个人喜好添加 一 picker view 嵌入页面的滚动选择器 注意 其中只可放置组件 其他节点不会显示 picker view co
  • 1.7 聪明的投资者: 积极型投资者的证券组合策略-被动的方法

    积极型投资者 指出不应该做哪些事情 不购买高等级的优先股 低等级债券 如果一公司要出很高的利息才能借到钱 说明该公司风险较高 要购买高等级的应税债券和优质的免税债券 二级债券和优先股 信用等级较低的公司很难卖出普通债券 不可转换债券 所以他
  • springboot自定义favicon.ico不生效

    本人以下均实验过都不成功 最后成功的办法为 在 resources static favicon ico 更换浏览器为谷歌浏览器 下面是其他方法 关闭默认图标 在application properties中添加 spring mvc fa
  • Docker进阶学习: swarm扩展学习

    swarm 集群的管理和编排 docker可初始化一个 swarm 集群 其他节点可加入 manager worker Node 就是一个docker节点 多个节点组成了一个网络集群 manager worker Service 服务 可管
  • 交易的本质 什么样的信仰,决定什么样的交易人生

    什么样的信仰 决定什么样的生活 同样 什么样的理念 也决定了什么样的交易 多数的交易员都把能否在交易市场稳定化盈利归结于自己从事这个行业的时间 通常很多人会说五年入门 十年小成等等 好像只要坚持个五年十年就能够在交易市场找到自己的位置 你信
  • JAVA WEB 中间件为SERVLET(四)

    写一个用户登录部署到tomcat 本地 先找到一个模板 HTML代码复制到本地的项目index jsp中 这个登录模板包含一个JSP 一个JS 三个CSS等文件 这个是index jsp代码
  • 解决git commit 报错WARNING: Block comments use a trailing */ on a separate line

    首先用一段报错的code作为示例 struct ctrl opt dtg pt IP DTG 0xf8 0x01 IP DTG 0xf0 0x00 git commit会报错 WARNING Block comments should al
  • 办公小技巧:VSCode无法安装插件怎么办?

    Visual Studio Code是Microsoft开发的一款开源免费的现代化轻量级代码编辑器 它体积小 启动快 系统内存占用率低非常适合搭建IDE VSCode不仅支持几乎所有主流的开发语言的语法高亮 智能代码补全 自定义热键 括号匹
  • 解决 qml module “QtQuick“ is not installed问题

    在编写QWidget QML 程序上 编译通过运行没有问题 但是点击加载qml窗口时 软件运行时提示module QtQuick Window is not installed 这个错误问题 其实是缺少于是把qt 安装目录下的qml模块相关
  • C语言 命名和关键字

    变量的命名规则 变量名可以由字母 数字和 下划线 组合而成 变量名不能包含除 以外的任何特殊字符 如 逗号 空格等 变量名必须以字母或 下划线 开头 变量名不能包含空白字符 换行符 空格和制表符称为空白字符 C 语言中的某些词 例如 int
  • SSH框架相关准备与入门学习

    最近开始学习java web开发 记录一下学习的过程 主要分为三个步骤 1 基础 java Mysql入门学习 2 中级 html css javascipt servlet jsp入门学习 推荐韩顺平相关视频 w3cshool在线教程 一
  • golang sleep

    golang的休眠可以使用time包中的sleep 函数原型为 func Sleep d Duration 其中的Duration定义为 type Duration int64 Duration的单位为 nanosecond 为了便于使用
  • python——selenium

    一 Selenium Python环境搭建及配置 1 1 selenium 介绍 selenium 是一个 web 的自动化测试工具 不少学习功能自动化的同学开始首选 selenium 因为它相比 QTP 有诸多有点 免费 也不用再为破解
  • cpolar内网穿透+ EasyImage组合,自建一个图床网站

    文章目录 1 前言 2 EasyImage网站搭建 2 1 EasyImage下载和安装 2 2 EasyImage网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar云端设置 3 2 Cpolar内网穿透本地
  • 【马士兵】Python基础--15

    Python基础 15 文章目录 Python基础 15 编程思想 类与对象 类的创建 对象的创建 类属性 类方法 静态方法 动态绑定属性和方法 知识点总结 编程思想 类与对象 python中一切皆对象 类的创建 类的名称由一个或多个单词组
  • 【SpringCloud】SpringAMQP总结

    文章目录 1 AMQP 2 基本消息模型队列 3 WorkQueue模型 4 发布订阅模型 5 发布订阅 Fanout Exchange 6 发布订阅 DirectExchange 7 发布订阅 TopicExchange 8 消息转换器
  • 迁移学习 & 凯明初始化

    前言 这一章其实就是之前没做完的事 来补一下 两者其实没啥关系 迁移学习 以下内容学习自迁移学习 斯坦福21秋季 实用机器学习中文版 迁移学习包括什么 feature extraction train a model on a relate
  • 由于缺少调试目标 E:a\b\c\串口配置工具\bin\Debug\串口配置工具.exe“,visual Studio无法开始调试。请生成项目并重试,或者相应OutputPath和AssemblyNa

    最近做一个窗体程序时候出现这个错误 我的项目名称是串口配置工具 建议为英文来命名 项目名称下面有这两个 发现 没有这个串口配置工具 exe 然后再这个 这里面发现这个串口配置工具 exe 最后直接 exe文件把这个复制到 项目名称 bin
  • C++基础——const成员函数

    目录 一 Const成员函数 1 定义 2 格式 3 代码示例 h文件 definition cpp文件 特性 例 那么const对象既可以调用非const型成员函数吗 问题3 const成员函数内可以调用其它的非const成员函数吗 问题