在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. AndroidManifest.xml文件详解(permission-group)

    http://blog.csdn.net/think_soft/article/details/7578760 语法(SYNTAX): <permission-groupandroid:desc ...

  2. JSP2 自定义标签

    实现步骤 实现自定义标签的处理类继承javax.servlet.jsp.tagext.SimpleTagSupport,并重写doTag方法 建立标签库配置文件 在jsp中使用自定义标签 一个简单的标 ...

  3. Python开发基础-Day11内置函数补充、匿名函数、递归函数

    内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: divmod(a, b) #a.b为数字,a为除数,b ...

  4. CSS 笔记——背景布局

    4. 背景布局 -> 背景 (1)background 基本语法 background : background-color || background-image || background- ...

  5. BZOJ 4247 挂饰(背包问题)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4247 [题目大意] JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将 ...

  6. 5月学习总结(Ant-Design,mustache,require.js,grunt)

    一.Ant-Design学习 因为Ant-Design是基于React实现的,之前自己也学过一段时间的React,对React还是相对比较熟悉的,在学习Ant-Design也还不算吃力. 最开始是从源 ...

  7. 微信小程序,开发者工具更新以后wxss编译错误

    出现上述错误,解决方法如下: 1.在控制台输入openVendor() : 2.清除里面的wcsc wcsc.exe 3.重启开发者工具 搞定!

  8. win7与Ubuntu 13.04双系统修改启动项顺序

    在在win7下安装了Ubuntu 13.04后,在grub中,win7启动想是最后一个,为了把win7设置为默认启动项,需要更改grub设置.google了半天,发现更改/etc /default/g ...

  9. 用yum安装完mysql后没有mysqld的问题

    在Centos中用命令 yum install mysql安装数据库,但装完后运行mysqld启动mysql的时候提示找不到,通过 find / | grep mysqld 也没找到mysqld的目录 ...

  10. JavaScript基础入门教程(四)

    说明 前面三篇博客介绍了js中基本的知识点,包括变量类型及其转换.表达式.运算符等小知识点,这篇博客主要讲的是对象.如果你学过java等语言,你也许在下文的阅读中发现在js中的对象与java中的对象存 ...