在C++编程中实现数据的输入/输出能够用cin>>ch/cout<<ch;

可是使用cin>>ch或cout<<ch并不能实现一些特殊的数据的输入或者输出,比方输入复数、输出复数、输入时间、输出时间

为了解决对于特殊数据的输入和输出在C++中能够使用运算符重载的方式实现。能够通过重载>>和<<运算符实现特殊数据的输入和输出

1重载>>

重载函数的形式:

<span style="color:#000000;">friend istream&  operator >>(istream& input, Complex& c);</span>

第一个參数: istream表示输入流

第二个參数: Complex& 表示对Complex类实行输入

返回值: istream表示返回输入流

2重载<<

重载函数的形式:

 friend ostream&  operator <<(ostream& output, Complex& c);

第一个參数: ostream表示输入流

第二个參数:
Complex& 表示对Complex类实行输出

返回值:
ostream表示返回输出流

运用实例,通过重载>>和<<实现复数的输入和输出

#include <iostream>

using namespace std;

class Complex
{
public:
Complex( )//定义默认构造函数初始化复数
{
real=0;
imag=0;
} //使用初始化表初始化复数
Complex(double r, double i):real(r),imag(i){} Complex operator+(Complex &c2);//复数的加法
Complex operator-(Complex &c2);//复数的减法
Complex operator*(Complex &c2);//复数的乘法
Complex operator/(Complex &c2);//复数的除法 //重载<<运算符实现输出复数
friend ostream& operator <<(ostream& output, Complex& c); //重载>>运算符实现输入复数
friend istream& operator >>(istream& input, Complex& c); private:
double real;//复数的实部
double imag;//复数的虚部
}; //复数的加法
Complex Complex::operator+(Complex &c2)
{
Complex c3; c3.real = real + c2.real;
c3.imag = imag + c2.imag; return c3;
} //复数的减法
Complex Complex::operator-(Complex &c2)
{
Complex c3; c3.real = real - c2.real;
c3.imag = imag - c2.imag; return c3;
} //复数的乘法
Complex Complex::operator*(Complex &c2)
{
Complex c3; c3.real = real*c2.real - imag * c2.imag;
c3.imag = real*c2.imag + imag * c2.real; return c3;
} //复数的除法
Complex Complex::operator/(Complex &c2)
{
Complex c3; c3.real = (real * c2.real + imag * c2.imag) / (c2.real*c2.real + c2.imag * c2.imag); c3.imag = (imag * c2.real - real * c2.imag) / (c2.real*c2.real + c2.imag * c2.imag); return c3;
} //重载>>运算符实现输入复数
istream& operator >>(istream& input, Complex& c)
{
char op, ch;//保存字符 ,如1+2i, op保存+, ch保存i input>>c.real>>op>>c.imag>>ch; return input;
} //重载<<运算符实现输出复数
ostream& operator <<(ostream& output, Complex& c)
{
output<<c.real<<"+"<<c.imag<<"i"<<endl; return output;
} void main( )
{
//定义三个复数
Complex c1, c2, c3; cout<<"请输入一个复数:";
cin>>c1; cout<<"请输入一个复数:";
cin>>c2; //打印第一个复数
cout<<"c1 = ";
cout<<c1; //打印第二个复数
cout<<"c2 = ";
cout<<c2; //两个复数相加
c3 = c1 + c2;
cout<<"c1 + c2 = ";
cout<<c3; //两个复数想减
c3 = c1 - c2;
cout<<"c1 - c2 = ";
cout<<c3; //两个复数相乘
c3 = c1 * c2;
cout<<"c1 * c2 = ";
cout<<c3; //两个复数相除
c3 = c1 / c2;
cout<<"c1 / c2 = ";
cout<<c3; system("pause");
}

程序运行结果:

在程序中分别输入  5+10i  和  4+8i  后



重载&lt;&lt;和&gt;&gt;的更多相关文章

  1. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  2. PHP类和对象之重载

    PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的.属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值.读取.判断属性是否设置.销毁属性. ...

  3. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  4. new/delete重载

    在c++中,有时我们需要在运行阶段为一个变量分配未命名的内存,并使用指针来访问它,这里就可以用到new关键字.另外需要指出的是,new分配的内存块通常与常规变量分配的内存块不同,常规变量的值都储存在被 ...

  5. java重载与覆写

    很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆. 先给出我的定义: overload(重载):在同一类或者有着继承关系的类中,一组名称相同,参 ...

  6. 【C++】多态性(函数重载与虚函数)

    多态性就是同一符号或名字在不同情况下具有不同解释的现象.多态性有两种表现形式: 编译时多态性:同一对象收到相同的消息却产生不同的函数调用,一般通过函数重载来实现,在编译时就实现了绑定,属于静态绑定. ...

  7. C++ 运算符重载时,将运算符两边对象交换问题.

    在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...

  8. C++重载new和delete运算符

    内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...

  9. Java学习笔记之方法重载

    被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...

  10. Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法

    Qt 5.0+ 版本提供了 connect 的新语法,相比之前的语法新语法可以提供编译期检查,使用也更方便.可是使用过程中发现一个小问题——当某个 signal 和成员函数是重载关系的时候,qmake ...

随机推荐

  1. 洛谷P2556 [AHOI2002] 黑白图像压缩 [模拟]

    题目传送门 黑白图像压缩 题目描述 选修基础生物基因学的时候, 小可可在家里做了一次图像学试验. 她知道:整个图像其实就是若干个图像点(称作像素)的序列,假定序列中像素的个数总是 8 的倍数, 于是每 ...

  2. js实现table导出为Excel文件

    1.首先创建好表格. 2.然后在js中写三个方法 1)判断浏览器 2)定义文档类型 template : 定义文档的类型,相当于html页面中顶部的<!DOCTYPE> 声明.(个人理解, ...

  3. request (请求对象)

    一.学习请求 学习如何获取请求行, 请求头,请求体. 1. 获取请求行 获取请求方法 String method = request.getMethod(); System.out.println(m ...

  4. [BZOJ5011][JXOI2017]颜色

    5011: [Jx2017]颜色 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 84  Solved: 46[Submit][Status][Disc ...

  5. AGC 020 B - Ice Rink Game

    题面在这里! 倒着维护可以取的范围区间,判一下可不可能无解即可. #include<bits/stdc++.h> #define ll long long using namespace ...

  6. 【线段树】I Hate It

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  7. Generator函数(三)

    Generator.prototype.return() 1.Generator函数返回的遍历器对象还有一个return方法,可以返回给定的值,并终结Generator函数的遍历. function* ...

  8. Codeforces Round #339 (Div. 1) C. Necklace 构造题

    C. Necklace 题目连接: http://www.codeforces.com/contest/613/problem/C Description Ivan wants to make a n ...

  9. java访问ad域

    1.活动目录(AD) Active Directory 是用于 Windows Server 的目录服务.它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用.Active Dire ...

  10. 如何解决weblogic server启动中在IIOP后运行缓慢

    WebLogic Server在Linux环境中,有时因为linux OS的安全包没有安装,导致weblogic server 在启动的时候会在长时间的停留在 <2/07/2009 08:54: ...