在C++中复数运算可以通过两种方式来实现:

1)标准C++复数运算库:complex<typedef> ObjectName(realPart, imagePart);

2)自定义复数运算类:包括复数的实部、虚部、四则运算、模运算、共轭等。

后者可以根据需要自己定义,关于类的定义这里不再说明,具体的功能可以根据自己的需要去实现。这里介绍C++标准的复数运算类complex,网上已经有一些关于complex类的简单介绍,但大多都是比较粗略的说明,并没有提供完整而详细的介绍。这里参考了网上的一些资源,首先介绍complex类的定义,包括:对象的构造方法、算术运算、赋值运算符、指数运算、对数运算、幂运算、三角函数运算、输入输出重载等,然后给出了一个使用例程,用于对其使用方法的总结用户总结。

一、complex类简介

C++复数运算由标准C++复数运算库(complex number mathematics library)来实现。complex类定义了标准的输入输出运算、算是运算、关系运算和赋值运算,同时还包括指数运算、对数运算、幂运算、平方根、三角函数(正弦,余弦,双曲正弦,双曲余弦)等,还包括笛卡尔坐标系到极坐标系转换的函数。

二、文件包含

1、 #include <complex.h>

2、 #include <math.h>

三、构造方法

1、complex为模板类,因此在定义一个复数时需要制定变量类型,如complex<double> cm(1,1);

2、定义时实部和虚部参数可以使用变量,如:

double a = 1;
double b = 1;
complex<double> cm(a, b);

3、以下定义均合法:

a) complex(): complex<double> c1;// c1 = (0,0);

b) complex(double real, double<double> imag = 0.0): complex c2(1.0);// c2 = (1.0,0);

c) complex<double> c3 = 3.4; // c3 = (3.4,0);

d) complex c4 = 3.4 + complex(1.2, 3.5);

四、笛卡尔坐标系和极坐标系下有关函数

1、real();: friend double real(complex a);

2、 img();: friend double imag(complex a);

3、 abs();: friend double abs(complex a);

4、 norm();: friend double norm(complex a);

5、 arg();: friend double arg(complex a);

6、 conj();: friend complex conj(complex a);

7、 polar();: friend complex polar(double r,double t);

示例:

d = real(a);// 返回复数a的实部
d = imag(a);// 返回复数a的虚部
d = abs(a);// 返回复数a的模值/幅值
d = norm(a);// 返回复数a的模值平方
d = arg(a);// 返回复数a的幅角
z = conj(a);// 返回复数a的共轭复数
z = polar(r,t);// 复数的极坐标定义方式,r为幅值,t为幅角

五、指数、对数、幂、平方根运算函数

1、 exp(); friend complex exp(complex a);

2、 log(); friend complex log(complex a);

3、 pow(); 四种

a) friend complex pow(double a, complex b);

b) friend complex pow(complex a, int b);

c) friend complex pow(complex a, double b);

d) friend complex pow(complex a,complex b);

4、 sqrt();friend complex sqrt(complex a);

六、三角关系运算函数

1、 sin(); friend complex sin(complex a);

2、 cos(); friend complex cos(complex a);

3、 sinh(); friend complex sinh(complex a);

4、 cosh(); friend complex cosh(complex a);

七、运算符重载

运算符重载包括:+、-、*、/(包括+=、-=、*=、/=)、==、!=、<<、>>

八、使用例程

1、开发环境:Win7 (X64) / VS2010

2、创建新项目,编写代码如下:

#include <iostream>
#include <complex>
#include <math.h>using namespace std;void main()
{// 复数类对象定义cout << "复数类对象定义" << endl;double r = 1.0;double x = 1.0;complex<double> c1;complex<double> c2(1,1);complex<double> c3(r,x);complex<double> c4 = 2.0;complex<double> c5 = c4 + complex<double>(2,1);cout << "c1 = " << c1 << endl;cout << "c2 = " << c2 << endl;cout << "c3 = " << c3 << endl;cout << "c4 = " << c4 << endl;cout << "c5 = " << c5 << endl << endl;// 笛卡尔坐标系和极坐标系下有关函数cout << "笛卡尔坐标系和极坐标系下有关函数" << endl;cout << "c5实部real:" << c5.real() << endl;cout << "c5虚部imag:" << c5.imag() << endl;cout << "c5模值abs:" << abs(c5) << endl;cout << "c5模值平方norm:" << norm(c5) << endl;cout << "c5幅角arg:" << arg(c5) << endl;cout << "c5共轭复数conj:" << conj(c5) << endl;complex<double> z = polar(1.0, 3.14/6);cout << "复数极坐标定义polar:" << z << endl << endl;// 运算符重载,四则运算cout << "运算符重载,四则运算" << endl;cout << "c2 + c5 = " << c2 + c5 << endl;cout << "c2 - c5 = " << c2 - c5 << endl;cout << "c2 * c5 = " << c2 * c5 << endl;cout << "c2 / c5 = " << c2 / c5 << endl << endl;system("pause");
}

3、运行结果如图1所示:

图1

参考:

1)http://blog.chinaunix.net/uid-20559667-id-1924707.html

2)http://blog.csdn.net/qhs1573/article/details/12254205

标准C++复数运算类详解及使用例程相关推荐

  1. python布尔类型运算_Python对象类型及其运算方法(详解)

    基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = 'abc' >> ...

  2. OpenCV Mat类详解和用法(官网原文)

    参考文章:OpenCV Mat类详解和用法 我马克一下,日后更 官网原文链接:https://docs.opencv.org/3.2.0/d6/d6d/tutorial_mat_the_basic_i ...

  3. 转载:c+string类详解

    C++ string 类详解 </h1><div class="clear"></div><div class="postBod ...

  4. Cocos2d之Node类详解之节点树(二)

    一.声明 本文属于笔者原创,允许读者转载和分享,只要注明文章来源即可. 笔者使用cocos2d框架的cocos2d-x-3.3rc0版本的源代码做分析.这篇文章承接上篇<Cocos2d之Node ...

  5. pytorch教程之nn.Module类详解——使用Module类来自定义网络层

    前言:前面介绍了如何自定义一个模型--通过继承nn.Module类来实现,在__init__构造函数中申明各个层的定义,在forward中实现层之间的连接关系,实际上就是前向传播的过程. 事实上,在p ...

  6. 菜鸟的学习之路(12) —HashSet类详解

    一.HashSet类详解: HashSet类的底层是HaskMap实现的.存入HashSet的元素是有HashMap的key来保存的.而HashMap的值是一个Object对象. HashSet中是不 ...

  7. OpenCV Mat类详解和用法

    OpenCV Mat类详解和用法 我们有多种方法可以获得从现实世界的数字图像:数码相机.扫描仪.计算机体层摄影或磁共振成像就是其中的几种.在每种情况下我们(人类)看到了什么是图像.但是,转换图像到我们 ...

  8. 集合框架之ArrayDeque类详解

    Java集合框架分析(Deque)---ArrayDeque类详解 目录 一.数据结构 二.类标题 三.字段 四.构造函数 五.方法分析 类型 方法 作用 添加元素 public void addFi ...

  9. Python 标准库之 sys 模块详解

    Python sys 模块详解 1. 简介 "sys"即"system","系统"之意.该模块提供了一些接口,用于访问 Python 解释器 ...

最新文章

  1. Please ensure JDK installation is valid and compatible with the current OS
  2. 大道至简阅读笔记03
  3. 让列表只显示数据,不显示文件夹的方法
  4. mysql视图_mysql之视图详解
  5. ROM微型计算机是什么,在微型计算机中,ROM是().
  6. IEEE754标准中32位、64位浮点数的取值范围
  7. 【技术文档】JEECG 页面字典控件与Popup使用
  8. 私服采集,在线添加系统!
  9. java使用UDP数据报通讯方式QQ聊天系统:服务器、客户端
  10. 樊登36个问题建立亲密关系_36个问题建立亲密关系
  11. poi导出word模板项目实例(一个文件)
  12. mysql数据库的安装和配置文件_Mysql数据库介绍、安装和配置文件
  13. 程序员的思维(转载于伯乐在线-author:水流年)
  14. C++ 高仿easyX图形库
  15. android 上层设置 自动调节亮度
  16. uniapp从开发App到上架应用市场需要经历什么?
  17. java设置小数点格式_java指定小数点后位数格式
  18. python人工智能学习需要学什么?
  19. 获取百度网盘下载真实地址
  20. AutoCAD 2014 新特性--针对开发人员

热门文章

  1. 安装了silverlight还是提示_Windows 10环境用友ERPU8V10.1安装方法~2019年11月
  2. 2022中国移动创客马拉松大赛 12W奖金,人少钱多,等你来战!
  3. DOS命令:ftype
  4. 中国云计费服务产业形势分析与营销趋势研究报告2022版
  5. ChatGPT+打印机自动写作业?都是科技与狠活
  6. php应用程序并行配置不正确,解决Win10应用程序无法启动因为并行配置不正确
  7. 【工具】向日葵远程控制之后键盘失效、自动锁定按住Alt键
  8. 【vue】1、vue介绍及vue基础指令
  9. 炒黄金如何避开亏损,有哪些技巧?
  10. 【计算机图形学学习】面向移动设备的真实感图形处理系统设计与实现 理论基础部分简读笔记