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

相关推荐
蜡笔小马4 分钟前
13.C++设计模式-策略模式
c++·设计模式·策略模式
计算机安禾7 分钟前
【c++面向对象编程】第36篇:析构函数应永远不抛出异常——原因与最佳实践
开发语言·c++
ゆづき11 分钟前
假如编程语言们有外号
java·c语言·c++·python·学习·c#·生活
REDcker9 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
basketball61610 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
想唱rap11 小时前
IO多路转接之poll
服务器·开发语言·数据库·c++
落羽的落羽12 小时前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
goodesocket12 小时前
芯片HAST测试:通电工作下如何精准模拟极端环境挑战?
c++
特种加菲猫13 小时前
从零开始手撕AVL树:详解插入、平衡因子更新与四种旋转
开发语言·c++
萑澈13 小时前
算法竞赛入门:C++ STL核心用法与时空复杂度速查手册
数据结构·c++·算法·stl