重载<<和>>
在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 后
重载<<和>>的更多相关文章
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
- PHP类和对象之重载
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的.属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值.读取.判断属性是否设置.销毁属性. ...
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...
- new/delete重载
在c++中,有时我们需要在运行阶段为一个变量分配未命名的内存,并使用指针来访问它,这里就可以用到new关键字.另外需要指出的是,new分配的内存块通常与常规变量分配的内存块不同,常规变量的值都储存在被 ...
- java重载与覆写
很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆. 先给出我的定义: overload(重载):在同一类或者有着继承关系的类中,一组名称相同,参 ...
- 【C++】多态性(函数重载与虚函数)
多态性就是同一符号或名字在不同情况下具有不同解释的现象.多态性有两种表现形式: 编译时多态性:同一对象收到相同的消息却产生不同的函数调用,一般通过函数重载来实现,在编译时就实现了绑定,属于静态绑定. ...
- C++ 运算符重载时,将运算符两边对象交换问题.
在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...
- C++重载new和delete运算符
内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...
- Java学习笔记之方法重载
被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...
- Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法
Qt 5.0+ 版本提供了 connect 的新语法,相比之前的语法新语法可以提供编译期检查,使用也更方便.可是使用过程中发现一个小问题——当某个 signal 和成员函数是重载关系的时候,qmake ...
随机推荐
- 关于std::ios::sync_with_stdio(false)
std::ios::sync_with_stdio(false); 很多C++的初学者可能会被这个问题困扰,经常出现程序无故超时,最终发现问题处在cin和cout上,(甚至有些老oier也会被这个问题 ...
- Hydra 8.4/8.5新增功能
Hydra 8.4/8.5新增功能 Kali Linux 2017.1自带的Hydra为8.3,现在Hydra升级到8.5,新增以下功能. (1)为输出文件选项-o,添加一个配套选项-b,允许 ...
- nodemon 基本配置与使用
在开发环境下,往往需要一个工具来自动重启项目工程,之前接触过 python 的 supervisor,现在写 node 的时候发现 supervisior 在很多地方都有他的身影,node 也有一个 ...
- 「2018山东一轮集训」Game
%%神仙题 首先转化一波模型:可以把原问题看成,初始每个位置有0/1个石子,1操作看成从一个位置拿走一个石子,2操作看成从l[i]拿走一个石子,并在[ l[i]+1 , r[i] ]的每个位置放上一个 ...
- 【数据结构(高效)/暴力】Parencodings
[poj1068] Parencodings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26686 Accepted ...
- 20162312实验四Java Android简易开发
实验准备 Android Studio 的下载: Android Studio 安装教程 准备中遇到的问题 最大的问题就是电脑无法虚拟化,因为微星的型号太多,我只好在网上找了许多方案一个个试,最后终于 ...
- OPENCV下SIFT算法使用方法笔记
这几天继续在看Lowe大神的SIFT神作,看的眼花手脚抽筋.也是醉了!!!!实在看不下去,来点干货.我们知道opencv下自带SIFT特征检测以及MATCH匹配的库,这些库完全可以让我们进行傻瓜似的操 ...
- 【mysql】mysql中varcher属性最大值能存多长
1.首先理解varchar(n),n表示什么 MySQL5.0.3之前varchar(n)这里的n表示字节数 MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200 ...
- jquer回显选中select下拉框
公司使用的框架比较旧,没有使用el等表达式. <% String context = request.getContextPath(); String index = (String)reque ...
- PostgreSQL配置文件--QUERY TUNING
5 QUERY TUNING 5.1 Planner Method Configuration. 下列参数控制查询优化器是否使用特定的存取方法.除非对优化器特别了解,一般情况下,使用它们默认值即可. ...