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

【C++】类和对象--日期类Date补充及流提取、流插入

const成员

1.1 const修饰类的成员函数

在Date日期类中,我们实例化一个普通对象。而普通对象调用普通成员函数需要传参,传参传给隐藏的this指针,下面给出一个例子:

代码语言:javascript

AI代码解释

class Date { public: Date(int year=0, int month=0, int day=0) { _year = year; _month = month; _day = day; } void Print() { cout << _year << "-" << _month << "-" << _day << endl; } private: int _year; int _month; int _day; }; int main() { //这里实例化的是一个普通对象 Date d(2025, 8, 23); //此时d(普通对象)调用Print //传参给this指针 //也就是将d1的地址传给了this d1.Print(); }

上面这种情况肯定是能够顺利运行的,但是如果实例化一个const对象呢,还能够顺利编译吗?

代码语言:javascript

AI代码解释

int main() { const Date d2(2025, 8, 23); d2.Print(); }

我们发现报错了:

这是因为将Date实例化为const,那么在调用Print()时,传入的地址类型应该是const Date *,但是this指针是Date的,那么这个转换是不被允许的(因为权限被放大了)

那么我们第一反应的解决方案肯定就是将这类的this指针类型修改成const Date *,但是我们学过这个this指针是由编译器自动生成的,我们没有办法直接修改。所以C++的设计者这样解决:

代码语言:javascript

AI代码解释

//在成员函数参数列表后面加上const修饰 //起作用就相当于void Print(const Date * const this ) //这样一来这个传参过程就能够顺利进行了 void Print() const { cout << _year << "-" << _month << "-" << _day << endl; }

总结:建议所有不修改成员变量的成员函数都加上const

  • const -> const 权限大小不变
  • 普通 -> const 权限变小(是编译器允许的)

Q:思考下面几个问题

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

A:答案

  1. 不能,权限被放大了
  2. 能,权限被缩小了
  3. 不能,权限被放大了
  4. 能,权限被缩小了

2. 取地址及const取地址操作符重载

前面讲到,一共有6个默认成员函数,我们已经学习了4个,现在我们来看一看剩下两个(并不是很重要,默认生成的即可):

http://www.jsqmd.com/news/487155/

相关文章:

  • 【2026年最新600套毕设项目分享】springboot躲猫猫书店管理系统(14147)
  • 从送快递到月薪8K+:杭州笃行好未来教育科技有限公司如何让“零基础”学员实现职业跃迁 - 资讯焦点
  • **发散创新:用Python构建可解释的AI监管框架——从代码到合规实践**在人工智能快速落地的今天,模型透明度与责任归属成为行业焦点。
  • Ubuntu 20.04配置网络
  • 【2026年最新600套毕设项目分享】springboot房产租赁管理系统(14148)
  • 2026实测减肥保健品排名前十名产品!减肥胶囊什么牌子有效果?科学减重不伤身 - 资讯焦点
  • 【MySQL 的 ONLY_FULL_GROUP_BY 模式】
  • 基于微信小程序的药店商城管理系统Python-flask
  • YOLO11 改进 - 主干网络_ 清华大学CloFormer AttnConv :利用共享权重和上下文感知权重增强局部感知,注意力机制与卷积的完美融合
  • 简单工厂模式和策略模式的区别
  • YOLO11 改进 - 主干网络_ RepViT重访移动端CNN的ViT视角:轻量级设计分离Token与Channel混合器,优化移动端实时检测
  • python 生成与安装 inquirement
  • 探索MATLAB下综合能源系统优化调度:阶梯式碳与供需灵活双响应的奇妙之旅
  • 轻松掌握C语言中的大小写字母转换
  • YOLO11 改进 - 主干网络_ SwinTransformer 移位窗口层次化视觉变换器:层次化特征提取增强多尺度目标感知,优化复杂场景检测
  • 新手也能上手!备受喜爱的降AI率工具 —— 千笔·降AI率助手
  • 【Azure Key Vault】下载Key Vault中保存证书的PFX文件报错问题分析
  • 空间栅格化(体素化)及射线选择原理
  • 【2026年最新600套毕设项目分享】springboot房屋交易系统(14149)
  • **发散创新:基于Python的脉冲神经网络模拟与实时计算优化实践**
  • 爱心捐赠系统,公益捐赠系统, 基于SpringBoot3+vue3的原创精品,适用于毕业设计、实习项目、学习项目
  • YOLO11 改进 - 主干网络_ FasterNet (基于PConv部分卷积的神经网络):轻量级设计优化内存访问效率,实现精度与速度双重提升
  • YOLOv11涨点改进| CVPR2026 |全网创新首发、Conv卷积改进篇 | 引入MSInit轻量级多尺度卷积,捕获局部细节和结构纹理信息,助力YOLOv11目标检测,图像分割,图像分类高效涨点
  • # 虚拟世界中的编程艺术:用 Rust构建轻量级 3D 场景引擎 在虚拟世界的浪潮中,**开发
  • 前端如何渲染 Markdown 格式:从基础到实战全指南
  • 快捷键及Dos命令
  • YOLO11 改进 - 主干网络_ MobileNetV4 移动网络第四版:通用倒瓶颈与移动注意力协同优化硬件效率,提升移动端检测适应性
  • H6光伏逆变器仿真模型:与量产程序一致的代码控制探索
  • YOLO11 改进 - 主干网络_ LSKNet大型选择性核网络:大核深度卷积与空间选择机制协同动态调整感受野,增强旋转目标检测
  • 大数据与会计专业必考证书有哪些?