C++重载>>和<<输入和输出运算符)
在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++重载>>和<<输入和输出运算符)相关推荐
- 重载运算与类型转换——基本概念,输入和输出运算符,算术和关系运算符,赋值运算符,下标运算符,递增和递减运算符,成员访问运算符...
一.基本概念 重载的运算符时具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.和其他函数一样,重载的运算符也包含返回类型.参数列表以及函数体. 重载运算符函数的参数 ...
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符
1. 总说明 输入输出运算符必须是非成员函数,否则他们左侧运算对象将是我们的类的一个对象,好比如下代码: Sales_data data; data << cout; 由于IO操作通常需要 ...
- C++细节 输出运算符的重载为什么不写成类的成员函数
打印类中的一些变量,此时就需要使用函数或者重载,为了提高代码可读性,一般使用操作符重载来书写,而cout并不在c++的默认类成员函数中,需要我们自己书写.第一种写在类中如下面的代码(我们以日期类举例, ...
- 有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,“<<”,“>>”,使之能够用于矩阵的输入和输出,以及矩阵之和。
有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+","<<",">>",使之能够用于矩阵的输入和输出, ...
- 语句的输入和输出 数据类型 运算符
一.C#基础 1.项目后缀: .config--配置文件(存放配置参数文件) .csproj--项目文件(管理文件项) .sln--解决方案文件(管理项目) .cs--源文件(程序代码) 2.函数四要 ...
- c++运算符重载与输入输出流重载
运算符重载 运算符重载--赋予运算符具有操作自定义类型数据功能 运算符重载本身也是一种函数,我们有两种写法--友元类运算符重载函数和类运算符重载 运算符重载的实质本身就是函数调用 我们要注意它的写法: ...
- 入职培训笔记记录--day2续(1、运算符 2、数据的输入与输出 3、控制语句)
再基础的东西也是要细心过一遍时间用的不多,但是还是有效果的. ---------------------------------------- 1.运算符 1.条件运算符(三目运算符): 表达式1 ? ...
- 第十八章 33用重载输出运算符函数实现字符串的输出
// 33用重载输出运算符函数实现字符串的输出 /*#include <iostream> using namespace std; class String { public:Strin ...
- 3月6日 输入与输出 数据类型 运算符
Main函数: static void Main(string [] args) { } 程序代码需要写在Main函数的花括号内. 一.输入与输出: string s=Console.Readline ...
最新文章
- python换零钱有多少种方案_Python3算法实例 1.2:动态规划 之 换零钱
- Master RenderMan Procedural Primitive DSO
- window.postMessage实现网页间通信
- python用函数绘制椭圆_python - 如何使用python从3个点找到椭圆的方程 - SO中文参考 - www.soinside.com...
- 利用ado.net和winform连接ms Server可以做什么?
- UILabel(富文本)
- RabbitMQ入门学习系列(二),单生产者消费者
- git clone 一部分_别再往 Git 仓库中放敏感信息了,不安全!
- idea通过数据库生成实体类插件_idea数据库生成实体类
- Flutter进阶—实现动画效果(九)
- 计算机网络综合布线的发展史,浅析计算机网络综合布线系统设计
- 修真院教学模式四大体系之职业素养
- BUUCTF中的“新年快乐”
- 网站出现 502 Bad Gateway 怎么解决?
- 管理学中的纳什均衡理论分享
- 【VMware】虚拟机不能全屏的解决方法
- C语言本身是用什么语言写的?
- My97date日期选择设置最大最小值
- 关于halcon基于表面的3d识别定位
- axure读取服务器文件,axure配置本地服务器
热门文章
- CRC24循环冗余校验码的FPGA实现
- 嵌入式Linux学习问题解决记录
- Linux基础--虚拟机的控制及linux系统的基本操作
- CollaDec 之前的三个SharePoint工具开源发布
- ORIG1和ORIG2的运用
- CSP认证201709-2	公共钥匙盒[C++题解]:结构体、排序、枚举
- Leetcode1702. 修改后的最大二进制字符串[C++题解]:思维题
- mybatis第一讲:初探mybatis实现简单的查询
- php怎么四舍五入,php 四舍五入的三种实现方法
- oracle和mysql登录方式_使用普通方式和连接池方式获取Oracle和Mysql链接