【C++入门】const 成员函数

news/2025/1/15 23:46:09/

文章目录

  • 一、基本概念
  • 二、经典问题
  • 三、使用建议

一、基本概念

const 修饰的成员函数就称作 const 成员函数。

例子:

class Date
{
public:void Display() const{...}private:int _year;int _month;int _day;
};

事实上,const 成员函数的这个 const 修饰的是 *this,也就是调用该成员函数的对象,因此在 const 成员函数内不能修改类的成员。
在这里插入图片描述

二、经典问题

来看下面几个问题:

const 对象可以调用非 const 成员函数吗?

不行,const 对象调用成员函数,传给 this 形参的是 const 对象的地址,而非 const 成员函数的 this 形参是普通对象的地址,这属于权限放大,是不合法的。

非 const 对象可以调用 const 成员函数吗?

可以,非 const 对象调用成员函数,传给 this 形参的是普通对象的地址,而 const 成员函数的 this 形参是 const 对象的地址,这属于权限缩小,是合法的。

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

不行,权限放大。

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

可以,权限缩小。

注意,权限可以平移、可以缩小,但是不能放大。

三、使用建议

但凡函数体内不修改成员的成员函数,都用 const 修饰。

因为 const 对象可以调用 const 成员函数(权限平移),普通对象也可以调用 const 成员函数(权限缩小);而 const 对象不能调用非 const 成员函数(权限放大)。


http://www.ppmy.cn/news/1029325.html

相关文章

【电池-超级电容器混合存储系统】单机光伏电池-超级电容混合储能系统的能量管理系统(Simulink仿真)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

LabVIEW开发图像采集和基于颜色的隔离

LabVIEW开发图像采集和基于颜色的隔离 在当今的工业和工厂中,准确性和精度是决定特定行业生产力的两个重要关键点。为了优化生产力,各行各业正在从手动操作转向自动操作和控制。机器人技术在工业过程中的出现为人类提供了机械辅助。机器视觉在工业机器人…

谈谈语音助手

目录 1.什么是语音助手 2.语音助手的发展过程 3.现在有哪些成熟的语音助手 4.语音助手对人类发展的影响 1.什么是语音助手 语音助手是一种能够通过语音交互与用户进行沟通和执行任务的虚拟助手。它基于人工智能和自然语言处理技术,能够理解用户的语音指令&#x…

力扣:60. 排列序列(Python3)

题目: 给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下: "123""132""213""231""312""…

Nginx 安装与部署

文章和代码已经归档至【Github仓库:https://github.com/timerring/front-end-tutorial 】或者公众号【AIShareLab】回复 nginx 也可获取。 文章目录 虚拟机安装CentOS7.4Linux配置配置上网配置静态ip Nginx的安装版本区别备份克隆 安装编译安装报错解决 启动Nginx防…

第五十二天

HTML5 ●MathML 是数学标记语言,是一种基于XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置标语言。 ●拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置。 在 HTML5 中&#xf…

LAXCUS分布式操作系统:技术创新引领高性能计算与人工智能新时代

随着科技的飞速发展,高性能计算、并行计算、分布式计算、大数据、人工智能等技术在各个领域得到了广泛应用。在这个过程中,LAXCUS分布式操作系统以其卓越的技术创新和强大的性能表现,成为了业界的佼佼者。本文将围绕LAXCUS分布式操作系统的技…

[LitCTF 2023]1zjs

这里一点想法没有看看源代码 查找flag没有发现 查找.php 有所发现 看起来是一种加密方式,查找 jsfuck NSSCTF{bd1[]f7[]3[]c8[]-9[]c5[]c-4[]c6[]4[]-a7[]2[]7[]-6[]7[]3[]b4[]4[]2[]6[]efbc}