当前位置: 首页 > news >正文

lesson2(补充)关于const成员函数

个人主页:Lei宝啊 

愿所有美好如期而遇


前言:

将const 修饰的 成员函数 称之为 const 成员函数 const 修饰类成员函数,实际修饰该成员函数 隐含的 this 指针 ,表明在该成员函数中不能对类的任何成员进行修改。
class Date
{
public:Date():_year(2023),_month(10),_day(28){}void print() const   //const限定this指针,相当于const Date* this{cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};int main()
{Date a;a.print();return 0;
}
思考下面的几个问题:
1. const对象可以调用非const成员函数吗?
class Date
{
public:Date():_year(2023),_month(10),_day(28){}void print1() const   //const限定this指针,相当于const Date* this{cout << _year << "-" << _month << "-" << _day << endl;}void print2(){cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};int main()
{Date a;a.print1();const Date b;b.print1();return 0;
}

编译器甚至都没有给出print2这个函数的选项,答案自然是不能,但为什么不能呢? 

我们定义的对象b是const类型,他的成员变量不能做修改,那他的别名的成员变量也不能修改,而我们上述代码中b对象不能调用print2函数是因为print2函数有权限放大,所以不能调用。
2. 非const对象可以调用const成员函数吗?

 

class Date
{
public:Date():_year(2023),_month(10),_day(28){}void print1() const   //const限定this指针,相当于const Date* this{cout << _year << "-" << _month << "-" << _day << endl;}void print2(){cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};int main()
{Date a;a.print1();const Date b;b.print1();Date c;c.print2();return 0;
}

 

权限放大不可以,但可以有权限的缩小,c对象成员变量可以修改,也可以不修改,他的别名成员变量不可以修改是合理的。

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

 这里是权限的缩小,是OK的


 

http://www.lryc.cn/news/211161.html

相关文章:

  • 前端 :用HTML ,JS写一个 双色球彩票中将机制,因为时间不够,加上本人懒没有用CSS美化界面,多包涵
  • 前端页面如何自适应--4种方法
  • 2024王道考研计算机组成原理——总线
  • 【Linux】进程概念(下)
  • 基于Spring Boot的本科生就业质量设计与实现
  • 238. 除自身以外数组的乘积 --力扣 --JAVA
  • 如何判断一个类是线程安全的
  • MyBatis的各种查询功能
  • 【Tomcat】如何在idea上部署一个maven项目?
  • Three.js 材质的 blending
  • 关于pcl 给new出的数据赋值报错问题
  • window11 更改 vscode 插件目录,释放C盘内存
  • 【PyQt学习篇 · ⑥】:QWidget - 事件
  • Vue、jquery和angular之间区别
  • MATLAB算法实战应用案例精讲-【图像处理】机器视觉(基础篇)(六)
  • 硬件知识积累 RS232 接口
  • 机器人入门(四)—— 创建你的第一个虚拟小车
  • 部署K8S
  • [NSSCTF 2nd] web刷题记录
  • MyBatis获取参数值的两种方式(重点)
  • Cesium弹窗可随地图移动
  • MySQL WITH AS及递归查询
  • Harbor私有镜像仓库搭建
  • 线段树 区间赋值 + 区间加减 + 求区间最值
  • 大模型之十九-对话机器人
  • 『力扣刷题本』:删除排序链表中的重复元素
  • Android S从桌面点击图标启动APP流程 (六)
  • Java I/O (输入/输出)
  • nodejs+vue食力派网上订餐系统-计算机毕业设计
  • 【计算机视觉】对极几何