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代码的缓存去给刷新.

相关推荐
2301_789015621 天前
DS进阶:AVL树
开发语言·数据结构·c++·算法
CoderCodingNo1 天前
【GESP】C++五级练习题 luogu-P1182 数列分段 Section II
开发语言·c++·算法
Qt学视觉1 天前
AI2-Paddle环境搭建
c++·人工智能·python·opencv·paddle
myloveasuka1 天前
C++进阶:利用作用域解析运算符 :: 突破多态与变量隐藏
开发语言·c++
keep intensify1 天前
康复训练 5
linux·c++
0 0 01 天前
CCF-CSP 38-4 月票发行【C++】考点:动态规划DP+矩阵快速幂
c++·算法·动态规划·矩阵快速幂
OxyTheCrack1 天前
【C++】详细拆解std::mutex的底层原理
linux·开发语言·c++·笔记
j_xxx404_2 天前
力扣困难算法精解:串联所有单词的子串与最小覆盖子串
java·开发语言·c++·算法·leetcode·哈希算法
筱砚.2 天前
C++——lambda
开发语言·c++·算法
sycmancia2 天前
C++——动态内存分配、关于虚函数、关于继承中的强制类型转换
开发语言·c++