在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,但是输入输出的对象只能是 C++ 内置的数据类型(例如 bool、int、double 等)和标准库所包含的类类型(例如 string、complex、ofstream、ifstream 等)。

如果我们自己定义了一种新的数据类型,需要用输入输出运算符去处理,那么就必须对它们进行重载。本节以前面的 complex 类为例来演示输入输出运算符的重载。

其实 C++ 标准库已经提供了 complex 类,能够很好地支持复数运算,但是这里我们又自己定义了一个 complex 类,这样做仅仅是为了教学演示。

本节要达到的目标是让复数的输入输出和 int、float 等基本类型一样简单。假设 num1、num2 是复数,那么输出形式就是:

#include <iostream>
using namespace std;
class complex
{public:complex();complex(double a);complex(double a, double b);friend complex operator+(const complex & A, const complex & B);friend complex operator-(const complex & A, const complex & B);friend complex operator*(const complex & A, const complex & B);friend complex operator/(const complex & A, const complex & B);friend istream &operator>>(istream & in ,complex & A);friend ostream &operator<<(ostream & out ,complex & A);void display()const;
private:double real;   //复数的实部double imag;   //复数的虚部
};
complex::complex()
{real = 0.0;imag = 0.0;
}
complex::complex(double a)
{real = a;imag = 0.0;
}
complex::complex(double a, double b)
{real = a;imag = b;
}
//打印复数
void complex::display()const
{cout<<real<<" + "<<imag<<" i ";
}
//重载加法操作符
complex operator+(const complex & A, const complex &B)
{complex C;C.real = A.real + B.real;C.imag = A.imag + B.imag;return C;
}
//重载减法操作符
complex operator-(const complex & A, const complex &B)
{complex C;C.real = A.real - B.real;C.imag = A.imag - B.imag;return C;
}
//重载乘法操作符
complex operator*(const complex & A, const complex &B)
{complex C;C.real = A.real * B.real - A.imag * B.imag;C.imag = A.imag * B.real + A.real * B.imag;return C;
}
//重载除法操作符
complex operator/(const complex & A, const complex & B)
{complex C;double square = B.real * B.real + B.imag * B.imag;C.real = (A.real * B.real + A.imag * B.imag)/square;C.imag = (A.imag * B.real - A.real * B.imag)/square;return C;
}//重载输入操作符
istream & operator>>(istream & in ,complex & A)
{in >>A.real>>A.imag;return in ;
}//重载输出操作符
ostream & operator<<(ostream &out ,complex &A)
{out <<A.real<<"+"<<A.imag<<" i ";return  out ;
}int main()
{complex c1(3, 4);complex c2(1, 2);complex c3;c3 = c1 + c2;cout<<"c1 + c2 = "<<c3<<endl;//c3.display();//cout<<endl;c3 = c1 - c2;cout<<"c1 - c2 = "<<c3<<endl;//c3.display();//cout<<endl;c3 = c1 * c2;cout<<"c1 * c2 = "<<c3<<endl;//c3.display();//cout<<endl;c3 = c1 / c2;cout<<"c1 / c2 = "<<c3<<endl;//c3.display();//cout<<endl;return 0;
}
c1 + c2 = 4+6 i
c1 - c2 = 2+2 i
c1 * c2 = -5+10 i
c1 / c2 = 2.2+-0.4 i

C++重载>>和<<输入和输出运算符)相关推荐

  1. 重载运算与类型转换——基本概念,输入和输出运算符,算术和关系运算符,赋值运算符,下标运算符,递增和递减运算符,成员访问运算符...

    一.基本概念 重载的运算符时具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.和其他函数一样,重载的运算符也包含返回类型.参数列表以及函数体. 重载运算符函数的参数 ...

  2. C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符

    1. 总说明 输入输出运算符必须是非成员函数,否则他们左侧运算对象将是我们的类的一个对象,好比如下代码: Sales_data data; data << cout; 由于IO操作通常需要 ...

  3. C++细节 输出运算符的重载为什么不写成类的成员函数

    打印类中的一些变量,此时就需要使用函数或者重载,为了提高代码可读性,一般使用操作符重载来书写,而cout并不在c++的默认类成员函数中,需要我们自己书写.第一种写在类中如下面的代码(我们以日期类举例, ...

  4. 有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,“<<”,“>>”,使之能够用于矩阵的输入和输出,以及矩阵之和。

    有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+","<<",">>",使之能够用于矩阵的输入和输出, ...

  5. 语句的输入和输出 数据类型 运算符

    一.C#基础 1.项目后缀: .config--配置文件(存放配置参数文件) .csproj--项目文件(管理文件项) .sln--解决方案文件(管理项目) .cs--源文件(程序代码) 2.函数四要 ...

  6. c++运算符重载与输入输出流重载

    运算符重载 运算符重载--赋予运算符具有操作自定义类型数据功能 运算符重载本身也是一种函数,我们有两种写法--友元类运算符重载函数和类运算符重载 运算符重载的实质本身就是函数调用 我们要注意它的写法: ...

  7. 入职培训笔记记录--day2续(1、运算符 2、数据的输入与输出 3、控制语句)

    再基础的东西也是要细心过一遍时间用的不多,但是还是有效果的. ---------------------------------------- 1.运算符 1.条件运算符(三目运算符): 表达式1 ? ...

  8. 第十八章 33用重载输出运算符函数实现字符串的输出

    // 33用重载输出运算符函数实现字符串的输出 /*#include <iostream> using namespace std; class String { public:Strin ...

  9. 3月6日 输入与输出 数据类型 运算符

    Main函数: static void Main(string [] args) { } 程序代码需要写在Main函数的花括号内. 一.输入与输出: string s=Console.Readline ...

最新文章

  1. python换零钱有多少种方案_Python3算法实例 1.2:动态规划 之 换零钱
  2. Master RenderMan Procedural Primitive DSO
  3. window.postMessage实现网页间通信
  4. python用函数绘制椭圆_python - 如何使用python从3个点找到椭圆的方程 - SO中文参考 - www.soinside.com...
  5. 利用ado.net和winform连接ms Server可以做什么?
  6. UILabel(富文本)
  7. RabbitMQ入门学习系列(二),单生产者消费者
  8. git clone 一部分_别再往 Git 仓库中放敏感信息了,不安全!
  9. idea通过数据库生成实体类插件_idea数据库生成实体类
  10. Flutter进阶—实现动画效果(九)
  11. 计算机网络综合布线的发展史,浅析计算机网络综合布线系统设计
  12. 修真院教学模式四大体系之职业素养
  13. BUUCTF中的“新年快乐”
  14. 网站出现 502 Bad Gateway 怎么解决?
  15. 管理学中的纳什均衡理论分享
  16. 【VMware】虚拟机不能全屏的解决方法
  17. C语言本身是用什么语言写的?
  18. My97date日期选择设置最大最小值
  19. 关于halcon基于表面的3d识别定位
  20. axure读取服务器文件,axure配置本地服务器

热门文章

  1. CRC24循环冗余校验码的FPGA实现
  2. 嵌入式Linux学习问题解决记录
  3. Linux基础--虚拟机的控制及linux系统的基本操作
  4. CollaDec 之前的三个SharePoint工具开源发布
  5. ORIG1和ORIG2的运用
  6. CSP认证201709-2 公共钥匙盒[C++题解]:结构体、排序、枚举
  7. Leetcode1702. 修改后的最大二进制字符串[C++题解]:思维题
  8. mybatis第一讲:初探mybatis实现简单的查询
  9. php怎么四舍五入,php 四舍五入的三种实现方法
  10. oracle和mysql登录方式_使用普通方式和连接池方式获取Oracle和Mysql链接