博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer Plus 学习笔记 第十一章 使用类 运算符重载 友元函数
阅读量:4127 次
发布时间:2019-05-25

本文共 2350 字,大约阅读时间需要 7 分钟。

运算符重载的限制:

限制这么多 人生还有什么意义= =python倒是可以把+变- -变*之类的

示例代码:

mytime2.h

#ifndef MYTIME2_H_#define MYTIME2_H_class Time{  private:    int hours;    int minutes;  public:    Time();    Time(int h, int m = 0);    void AddMin(int m);    void AddHr(int h);    void Reset(int h = 0, int m = 0);    Time operator+ (const Time & t) const;    Time operator- (const Time & t) const;    Time operator* (double n) const;    void Show() const;};#endif

mytime2.cpp

#include 
#include "mytime2.h"Time::Time(){ hours = minutes = 0; }Time::Time(int h, int m){ hours = h; minutes = m;}void Time::AddMin(int m){ minutes = m; hours += minutes / 60; minutes %= 60;}void Time::AddHr(int h){ hours += h;}void Time::Reset(int h, int m){ hours = h; minutes = m;}Time Time::operator+ (const Time & t) const{ Time sum; sum.minutes = minutes + t.minutes; sum.hours = hours + t.hours + sum.minutes / 60; sum.minutes %= 60; return sum;}Time Time::operator- (const Time & t) const{ Time diff; int tot1, tot2; tot1 = t.minutes + 60 * t.hours; tot2 = minutes + 60 * hours; diff.minutes = (tot2 -tot1 ) % 60; diff.hours = (tot2 - tot1) / 60; return diff;}Time Time::operator* (double mult) const{ Time result; long totalminutes = hours * mult * 60 + minutes * mult; result.hours = totalminutes / 60; result.minutes = totalminutes % 60; return result;}void Time::Show() const{ std::cout << hours << " hours, " << minutes << " minutes";}

usetime2.cpp

#include 
#include "mytime2.h"int main(){ using std::cout; using std::endl; Time weeding(4, 35); Time waxing(2, 47); Time total; Time diff; Time adjusted; cout << "weeding time = "; weeding.Show(); cout << endl; cout << "waxing time = "; waxing.Show(); cout << endl; cout << "total work time = "; total = weeding + waxing; total.Show(); cout << endl; diff = weeding - waxing; cout << "weeding time - waxing time = "; diff.Show(); cout << endl; adjusted = total * 1.5; cout << "adjusted work time = "; adjusted.Show(); cout << endl; return 0;}

友元(有缘= =)

 

友元函数

友元类

友元成员函数

 

处理外部函数调用类私有函数或对象 

比如 Time * 1.5 改成 1.5 * Time

一般情况 Time::Time operator* (double n)  const

这样的话就没办法适用1.5 * Time

 

所以需要友元函数来跟Time对象做做关系,让外部函数能够访问Time对象的成员函数或对象

 

  关于<< 的重载

这种方法只能适用于简单的 cout << time;

但是如果碰到 cout << "abc" << time 就没用了

那咋办捏 

这样写:

ostream & operator<< (ostream & os, Time & t)

{

.......

  return os;

}

 

转载地址:http://fnepi.baihongyu.com/

你可能感兴趣的文章
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(三)
查看>>
pytorch(5)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>