data类的实现

1.

首先用一个函数来得到每个月份的天数,使用static使数组变成静态数组为了之后的调用减少拷贝内容从而提高效率,写成成员函数是为了inline(成员函数默认有inline但声明不会有),因为该函数代码量小还要频繁调用.

判断一个年月日是否成立和打印一个日期

3.

默认构造函数和拷贝构造函数,注意全缺省只能放在声明处.

析构函数

赋值重载,注意返回值用于连续赋值.

注意month==13的时候的进一和day < 0时的相反情况.

7.

可以发现,这里直接调用了其他的运算符重载,因为运算符重载本质算一个成员函数,而成员函数之间可以相互调用,因此可行.

补充:+/-赋+=/-=还是+=/-=赋+/-的问题

上面两都是+=/-=赋+/-,下面以+赋+=为例子.

可以发现,对于+/-而言,都要拷贝两次,但是对于+=/-=而言,+/-赋+=/-=在调用+是要来两次拷贝

赋值一次拷贝.-=/=+赋+/-却一次拷贝都不用,显然.-=/=+赋+/-效率更高.

c++规定++重载时,有一个参数的为后置++,没有的为前置++.

--完全同理,我们可以发现后置都需要使用临时拷贝,而且由于传的是函数内部的局部变量所以返回值只能是变量而不是引用,因此后置要比前置多两次拷贝.

采用穷举法得到各种情况.

14.

类似原理,使用其他已完成重载来实现其他重载.

可以发现实现了==,>=,>之后的全部可用取反得到.

注意分析min和max以及使用flag来确定正负值.

补充:想要实现一个输入两个年月来得到二者之间日子差的函数

首先对>>和<<进行重载.

必须使用有元函数来重载,因为使用成员变量第一个参数必须是类类型,与>>的先ostream后类类型的常规使用相违背,故只能使用友元修饰全局变量(有了友元修饰就可以使用类类型中的private成员变量)来进行.

基本框架

重载标识,istream和ostream都只支持引用且<<中d最好用const,因为不用修改,但>>中由于要修改d,故不加.

再补充:

cin 和 cout 能混着使用的原因还有兼容c语言的原因.

首先要明白printf,scanf,cin,cout都有它们独立的缓存区.

要明白使用printf时printf会先刷新scanf的缓冲区,scanf同理.

cin使用时会先刷新cout的缓冲区同时刷新printf的缓冲区,printf会顺便刷新scanf的缓冲区.cout同理.

因此在>>的重载中同时使用cin和cout是可以的,即使是在>>的里面,在in的>>使用前会把上一句cout代码的缓存去给刷新.

相关推荐
小小晓.8 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法
hetao17338378 小时前
2026-08-27~29 hetao1733837 的刷题记录
c++·算法
chen<>8 小时前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++
会周易的程序员9 小时前
企业私有 AI 算力服务器架构设计:异构四节点 + QUIC 微服务
运维·服务器·c++·人工智能·微服务·架构
m0_734571769 小时前
深入理解C++ 类型转换<三>const_cast
开发语言·c++
库玛西9 小时前
Linux网络编程:HTTP/HTTPS协议核心技术全解析
linux·运维·服务器·网络·c++·http·https
布莱克60510 小时前
链表详解:定义、作用、应用场景及与数组的区别(C/C++ 实战)
c语言·开发语言·c++·链表
执子星海11 小时前
Registry Win32 API详解
c++·windows·microsoft·visualstudio·微软
江屿风12 小时前
C++OJ题经验总结(竞赛)5
开发语言·c++
zh路西法12 小时前
【玩转VLA具身智能机械臂】(三):视觉避障——从 RGB-D 点云到 MoveIt octomap 的完整落地
c++·ros2·gazebo·moveit2·ompl·octomap