87.重载流式运算符以及外部函数重载运算符

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <iostream>
 3 using namespace std;
 4
 5 class box
 6 {
 7 private:
 8     int x;
 9     int y;
10     int z;
11
12
13 public:
14     box() :x(10), y(20), z(30)
15     {
16
17     }
18
19     friend box operator +(const box &box1, const box &box2);
20     friend box operator +(const box &box1, int num);
21     friend ostream & operator << (ostream &, const box &box1);
22     friend istream &operator >> (istream &, box &box1);
23
24     void show()
25     {
26         cout << x << y << z << endl;
27     }
28
29 };
30
31 //外部重载,没有this指针隐含对象
32 box operator +(const box &box1, const box &box2)
33 {
34     box tmp;
35     tmp.x = box1.x + box2.x;
36     tmp.y = box1.y + box2.y;
37     tmp.z = box1.z + box2.z;
38     return tmp;
39 }
40
41
42 box operator +(const box &box1, int num)
43 {
44     box tmp;
45     tmp.x = box1.x + num;
46     return tmp;
47 }
48
49
50 //重载流运算符,输入一个引用,返回一个引用
51 ostream & operator << (ostream &,const box &box1)
52 {
53     return cout << box1.x << box1.y << box1.z << endl;
54 }
55
56 istream &operator >> (istream &, box &box1)
57 {
58     return cin >> box1.x >> box1.y >> box1.z ;
59 }
60
61 void main()
62 {
63     box box1;
64     box box2;
65     box box3 = box1 + box2;
66     box box4 = box1 + 20;
67     /*box4.show();*/
68     cin >> box1;
69     cout << box1;
70     cin.get();
71 }

原文地址:https://www.cnblogs.com/xiaochi/p/8596369.html

时间: 2024-10-12 03:35:39

87.重载流式运算符以及外部函数重载运算符的相关文章

C++重载(主要介绍使用友元函数重载)

重载限制 多数C++运算符都可以用下面的方式重载.重载的运算符不必是成员函数,但必须至少有一个操作数是用户自定义的类型.下面详细介绍C++对用户定义的运算符重载的限制. 1 重载后的运算符必须至少有一个操作数是用户自定义的类型,这将防止用户为标准类型重载运算符.因此,不能将减法运算符(-)重载为double值的和,而不是它们的差.虽然这种限制将对创造性有所影响,但可以确保程序正常运行. 2 使用运算符时不能违反运算符原来的句法规则.例如,不能将求模运算符(%)重载成使用一个操作数. 同样,不能修

思考: 对于一个要重载的运算符而言,什么样的运算符应该用类成员函数重载,什么情况应该用友元函数重载??

还是用一个例子来说明吧 1 #define unsigned int UINT32 2 3 class RMB 4 { 5 public: 6 RMB(UINT32 d, UINT32 c); 7 friend RMB operator +(RMB&, RMB&); 8 friend RMB& operator ++(RMB&); 9 void display() 10 { 11 cout<<(yuan + jf / 100.0)<<endl; 12

从一个二级题来看成员函数重载运算符和友元函数重载运算符

先上题:下列运算符都可以被友元函数重载的是: A)=,+,-,\ B)[],+,(),new C)->,+,*,>> D)<<,>>,+,* 正确答案为D 我们知道,在运算符重载,友元函数运算符重载函数与成员运算符重载函数的区别是:友元函数没有this指针,而成员函数有,因此,在两个操作数的重载中友元函数有两个参数,而成员函数只有一个. 因此,我们可以总结如下: 1.对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中

运算符重载三种形式(成员函数,友元函数,普通函数)详解

首先,介绍三种重载方式: 1 //作为成员函数重载(常见) 2 class Person{ 3 Private: 4 string name; 5 int age; 6 public: 7 Person(const char* name, int age):name(name),age(age){} 8 bool operator<(const Person& b); 9 10 }; 11 bool Person::operator<(const Person& b) 12 {

翻译-In-Stream Big Data Processing 流式大数据处理

相当长一段时间以来,大数据社区已经普遍认识到了批量数据处理的不足.很多应用都对实时查询和流式处理产生了迫切需求.最近几年,在这个理念的推动下,催生出了一系列解决方案,Twitter Storm,Yahoo S4,Cloudera Impala,Apache Spark和Apache Tez纷纷加入大数据和NoSQL阵营.本文尝试探讨流式处理系统用到的技术,分析它们与大规模批量处理和OLTP/OLAP数据库的关系,并探索一个统一的查询引擎如何才能同时支持流式.批量和OLAP处理. 在Grid Dy

函数重载与复制构造函数

函数重载与复制构造函数   一.函数重载 1.普通函数重载 用main函数多次重复调用一个相同名字但是不同类型的函数来处理不同类型的数据. 如 void func(int); void func(double); float func(float); void func(double); 2.成员函数的重载 我们可以将函数的重载推广到类的成员函数. Class  boy { Public: void  sum(); void  sum(int  x, int  y); } 二.函数的默认参数 在

流式布局的实现-1

流式布局可以实现逐行填满的布局效果:适用于关键词搜索和热门展示,可以动态的添加标签,用起来十分方便与快捷 源码下载(由慕课网的老师提供,谢谢) 之后说说主要的安排: 第一篇:创建类,确定继承关系,实现构造函数,确定成员函数: 第二篇:实现FlowLayout(流式布局)主要函数的方法: 第一篇:创建类,确定继承关系,实现构造函数,确定成员函数: 第二篇与之后几篇:实现各函数,并说明成员变量的作用; 和用listView实现下拉刷新一样,还是先分析文件结构: 包括了两个类: public clas

关于在C#中对函数重载理解

函数重载是个什么概念,才接触的这个概念的时候我也是完全昏了,还在自己看看了书后就理解了.那什么是函数重载呢?我个人理解的是在同一个作用域下有多个同名的函数,但是他们的形参的类型是不同的,或者参数个数是不同的.当我们调用这些函数时,怎么判断我们调用的是那一个函数呢,这个就要看你在使用重载函数时所传参数的类型或者参数个数.好了,话不说.看看代码就知道了. using System;namespace overload{    class a    {        public void print

c语言中,既然不支持函数重载,那么printf算怎么回事?在c语言中,它不就是被重载了吗?

这个问题问的不错.其实printf不是重载,c语言不支持函数重载 这句话是对的.printf函数是通过变长参数表实现的.你可以查看一下printf的函数原型声明.printf函数的实现在不同的机器上是不同的,但提供的接口是一致的.printf函数的正确声明形式如下:int printf(const *fmt,...)其中省略号表示参数表中参数的数量和类型是可变的.它是变长参数表的固定形式.省略号只能出现在参数表的尾部.具体的话你还是上网查查吧,我对这个原型也没研究.我想既然你能问这个问题,看点资