复数类四则运算及插入/提取操作zrx
在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,但是输入输出的对象只能是 C++ 内置的数据类型(例如 bool、int、double 等)和标准库所包含的类类型(例如 string、complex、ofstream、ifstream 等)。
如果我们自己定义了一种新的数据类型,需要用输入输出运算符去处理,那么就必须对它们进行重载。
下面以我们c++作业中的一道题为例
【CPP0048】复数类四则运算及插入/提取操作
为复数类Complex重载实现+,-,*,/,<<,>>等运算符,main(void)函数完成对其的测试
#include <iostream>
using namespace std;
#define Complex complex;
class complex {public:complex(double real = 0.0, double imag = 0.0) : m_real(real), m_imag(imag) { };
public: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);
private:double m_real; //实部double m_imag; //虚部
};
//重载加法运算符
complex operator+(const complex& A, const complex& B) {complex C;C.m_real = A.m_real + B.m_real;C.m_imag = A.m_imag + B.m_imag;return C;
}
//重载减法运算符
complex operator-(const complex& A, const complex& B) {complex C;C.m_real = A.m_real - B.m_real;C.m_imag = A.m_imag - B.m_imag;return C;
}
//重载乘法运算符
complex operator*(const complex& A, const complex& B) {complex C;C.m_real = A.m_real * B.m_real - A.m_imag * B.m_imag;C.m_imag = A.m_imag * B.m_real + A.m_real * B.m_imag;return C;
}
//重载除法运算符
complex operator/(const complex& A, const complex& B) {complex C;double square = B.m_real * B.m_real + B.m_imag * B.m_imag;C.m_real = (A.m_real * B.m_real + A.m_imag * B.m_imag) / square;C.m_imag = (A.m_imag * B.m_real - A.m_real * B.m_imag) / square;return C;
}
//重载输入运算符
istream& operator>>(istream& in, complex& A) {in >> A.m_real >> A.m_imag;return in;
}
//重载输出运算符
ostream& operator<<(ostream& out, complex& A) {if(A.m_imag>0)out << A.m_real << "+" << A.m_imag << "i";elseout << A.m_real<< A.m_imag << "i";return out;}
int main() {complex c1(1, 1), c2(-1, -1), c3; //定义复数类的对象cin >> c1;cout << c1 << endl;cout << c2 << endl;c3 = c1 - c2;cout << c3 << endl;c3 = c1 + c2;cout << c3 << endl;c3 = c1 * c2;cout << c3 << endl;c3 = c1 / c2;cout << c3 << endl;return 0;
}
问题解答:
1为什么complex里面要用的友元函数?
cout 是 ostream 类的对象,cin 是 istream 类的对象,要想达到这个目标,就必须以全局函数(友元函数)的形式重载">>"和"<<",而且因为重载">>"和"<<"要用到complex的私有成员函数,所以用友元函数实现。
2为什么重载的">>"和"<<"里面的参数有istream,ostream这些东西?
ostream为输出流
&在这里为引用
ostream& out为定义一个名字为out的引用型道输出流对象
同理 in。
复数类四则运算及插入/提取操作zrx相关推荐
- 7-1 复数类的操作
7-1 复数类的操作 1.声明一个复数类Complex(类私有数据成员为double型的real和image) 2.定义构造函数,用于指定复数的实部与虚部. 3.定义取反成员函数,调用时能返回该复数的 ...
- 编程题:7-2 复数类的操作
1.声明一个复数类Complex(类私有数据成员为double型的real和image) 2.定义构造函数,用于指定复数的实部与虚部. 3.定义取反成员函数,调用时能返回该复数的相反数(实部.虚部分别 ...
- 7-3 复数类的操作 (20分)----十分简单的代码
1.声明一个复数类Complex(类私有数据成员为double型的real和image) 2.定义构造函数,用于指定复数的实部与虚部. 3.定义取反成员函数,调用时能返回该复数的相反数(实部.虚部分别 ...
- C++ 实现一个复数类
要求 实现⼀个复数类 Complex . Complex 类包括两个 double 类型的成员 real 和 image ,分别表示复数的实部和虚部. 对 Complex 类,重载其流提取.流插⼊运算 ...
- 傅里叶变换基本概念及复数类实现
最近对图像处理算法比较感兴趣,也看了一些数字图像处理相关书籍,自己也实现过一些简单的图像处理算法.随着了解的深入,发现要真正理解图像处理各种骚操作,绕不开基于傅里叶变换的各种频率域滤波.对于lz这种数 ...
- 【C++深度剖析教程11】C++学习之编写代码实现复数类
今天,我来学习将复数的加减乘除以及比较运算,编写一个复数类,方便计算复数之间的运算.具体用的方法就是之前写过的操作符重载的概念来实现(操作符重载的概念学习). 那么为了显得清晰,今天写的程序运用模块化 ...
- C++编程入门--运算符重载复数类
题目:成运算符重载员函数形式实现复数类的四则运算 上机指导2中,我们以独立函数形式(非成员函数,非友元函数)实现了Complex附属类的加减乘除四则运算,这里要求用Complex成员函数形式实现Com ...
- 4-1 复数类的运算符重载
4-1 复数类的运算符重载 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 通过本题目的练习 ...
- 【C语言】复数的四则运算与复数运算的头文件
目录 一.复数的四则运算 二.复数的头文件#include<complex.h> 三.一些碎碎念 一.复数的四则运算 (1)计算方法 加法:(a+bi)+(c+di)=(a+c)+(c+d ...
最新文章
- 长沙望城:当好“贴心人” 扎牢“人民根” 坚守“云阵地”
- Asp.net动态加载控件的一些问题
- ORA-12545: Connect failed because target host or object does not exist
- 第一次scrum冲刺
- php fpm工作原理,什么是phpfpm的工作原理?
- 想成为企业争抢的目标吗?你需要掌握的五大热门IT技能
- QB期刊 | 纪念HGP20周年系列文章3:陈润生院士回顾我国早期生物信息学的发展...
- FAST算法学习笔记
- 弹性地基梁板实用计算_3款实用性高的农村别墅,造价低,越看越有韵味
- Python中hashlib.sha1()和hashlib.MD5()哈希算法的区别
- Word一般文章格式
- 易宝支付 java_易宝支付工具类
- beetl 获取html属性值,Beetl2.7.16中文文档(2)之高级功能
- 数据库插入、删除、修改语句
- java程序设计特点_Java编程语言的特点
- ST-Link烧写简单总结
- python伪装浏览器https_Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器...
- (附源码)springboot毕业论文管理系统 毕业设计 030946
- 如何查看linux系统版本
- 品牌传播之广告记忆效果研究
热门文章
- THE LION KING
- 白沙工业园新松机器人_郑州东强再传佳音,总投资约48亿,两大科技园区备案批复,开工时间已拟定!...
- python使用matplotlib制作精美的饼图
- cross entropy loss = log softmax + nll loss
- 【C++练习】4.1假设有三家银行:中国银行BOC、工商银行ICBC和农业银行ABC
- 基于WebServices简易网络聊天工具的设计与实现
- AV1 1.0 发布
- Docker三剑客——Machine
- python 正则匹配 手机号 QQ号 邮箱 日期 图片
- MOT论文笔记《MOTS: Multi-Object Tracking and Segmentation》