求邯郸网站制作,三打哈网络推广平台,公司网站建设案例,威海网站seo目录 一、输入输出(,)重载的实现
1.1初始版 1.2友元并修改
1.2.1简单介绍下友元
1.2.2修改
1.3重载
二、条件判断操作符的实现
2.1操作符的实现
2.2!操作符的实现
2.3操作符的实现
2.4,,操作符的实现
三、日期-日期的实现
…目录 一、输入输出(,)重载的实现
1.1初始版 1.2友元并修改
1.2.1简单介绍下友元
1.2.2修改
1.3重载
二、条件判断操作符的实现
2.1操作符的实现
2.2!操作符的实现
2.3操作符的实现
2.4,,操作符的实现
三、日期-日期的实现
四、下期预告 前言C初阶系列每一期博主都会使用简单朴素的语言将对应的知识分享给大家争取让所有人都可以听懂C初阶系列会持续更新上学期间将不定时更新但总会更的 一、输入输出(,)重载的实现
1.1初始版 我们先来试着重载(输出流)它的类型是ostream(output stream)也就是说如果我们在类里面实现的话我们只需要传递cout进去因为有this指针的存在我们可以少传一个值然后再通过这个传递过去的cout将日期打印出来就行。 最后思考一下返回值我们可以从coutabendl这段语句看出输出流是支持连续传参的也就是说它是有返回值的仔细思考可以看出它们最后都是流向了控制台面板然后输出出来也就是说它们都流向了cout所以我们的返回值就应该是cout。最好使用引用返回和引用传参因为这个参数对应的cout是个全局变量不会随着你函数作用域的结束而销毁。 第一次实现往往就实现成了这副模样 ostream operator(ostream out){out _year - _month - _dayendl;return out;} 逻辑没有问题也确实可以实现但是我们在具体使用的时候就会出现这样一个问题没有与之相匹配的运算符这是为什么 原因其实很简单在我们使用运算符时我们只需要d11;即可这就等效于d1.operator(1);那么我们coutd1,就像是将cout作为第一个参数进行传递这自然是不符合语法的但这个时候我们只需要d1cout就会等价于d1.operator(cout);就可以进行对应的流出。 d1cout: 1.2友元并修改
1.2.1简单介绍下友元 如果以后得d1cout 那未免有点抽象我还是更喜欢coutd1,这要如何解决呢我先揭晓答案在类中实现解决不了这个问题为什么呢因为在类中实现一个函数它的第一个参数注定就是this指针 因此我们只能够尝试在类外面使用两个参数来解决这个问题但这样的话就会涉及到一个问题那就是类中private的成员是没法访问的而直接把private去掉来解决这个问题就多少有点舍本逐末了。 这时候就可以介绍到友元什么是友元呢友元就是在类中声明一下需要友元的函数并在前friend这就是友元之后被友元的函数就可以使用类里面的私人成员例如说我有一个int sum(int a, int b)函数我想要这个sum函数可以访问到我类里面的成员那么我就可以在类中friend int sum(int a,int b);不过值得注意的一点是类和类之间的友元友元是单向的我把你看作是我的朋友可你不一定把我当你的朋友 例如你有两个类一个叫Date一个叫test你在Date里面friend class Date 那么在Date中就可以访问到test对象的私有成员但test不可以访问到Date的私有成员。 1.2.2修改
有了友元之后我们的修改便只需要在类外面把我们的函数写好后再在Date类中使用友元扩大我们函数的权限即可 1.3重载
有了前面的基础这个的实现自然是手到擒来的 二、条件判断操作符的实现
2.1操作符的实现
三个参数都相同就相同即年月日都相等就相等 bool operator(Date d1){return (_year d1._year) (_month d1._month) (_day d1._day);}
2.2!操作符的实现
复用一下操作符即可
bool operator!(Date d1){return !((*this) d1);}
2.3操作符的实现
先将大于的全都判断完剩下的就一定是小于或者等于也就是false顺着这个思路写 bool operator(Date d1){if (_year d1._year){return true;}if(_yeard1._year_monthd1._month){return true;}if (_year d1._year _month d1._month _day d1._day){return true;}return false;}
2.4,,操作符的实现
这三个操作符均可以通过复用实现这里就不再赘述。 bool operator(Date d1){return (*this) d1 || (*this) d1;}bool operator(Date d1){return !((*this) d1);}bool operator(Date d1){return !((*this) d1);}
三、日期-日期的实现
目标计算出两个日期之间差了多少天 采用的方法是先获得两个日期分别的年份通过年份的间隔来计算这两个年份之间差了多少天比方说2023.11.2和2020.10.1后面的月和日先忽略只计算2023年和2020年之间差了多少天。 然后创建两个年份对应的初始日期继续拿上面的例子来说创建的两个初始日期就是2023.1.1和2020.1.1然后通过的方式计算出和原日期之间的差值。 最后的结果就是年份之间差的天数小的年份和对应原日期的差距-大的年份和对应原日期的差距如果是小的减大的就交换下变量并将公式换为 -(年份之间差的天数-小的年份和对应原日期的差距大的年份和对应原日期的差距)这个可以用flaw实现 int operator -(Date d2){int big_year _year;int small_year d2._year;int sum 0; int flaw 1;if (*this d2){int tmp big_year;big_year small_year;small_year tmp;flaw -1;}Date d1_cp(_year,1,1);Date d2_cp(d2._year,1,1);while (small_year ! big_year){sum GetYearDay(small_year);small_year;}int a1 0; int a2 0;while (d1_cp ! (*this)){d1_cp;a1;}while (d2_cp ! d2){d2_cp;a2;}if(flaw1)return sum a1 - a2;elsereturn -(sum-a1a2);}
测试 四、下期预告
类和对象就这样讲完了下回我们来讲一下C的内存管理QAQ