二、C++复数的实现
C++复数的实现
在数字图像处理领域,复数这一类型会被经常使用到。但是在C++和Qt中都没有可以使用的复数类。为了今后的方便,我们可以自己定义一个C++复数类,以便将来使用。
一、复数的属性
复数包含实数部分和虚数部分,如果直接使用 a + ib 的模式会使得后面的一系列操作变得较为复杂。这里我们直接给复数定义两个成员变量 m_rl 和 m_im。
public: double m_rl,m_im;
二、我们同样需要构造函数来初始化复数实例
public: ComplexNumber(double rl,double im); ComplexNumber();
它们的实现如下:
ComplexNumber::ComplexNumber() { m_rl = ; m_im = ; } ComplexNumber::ComplexNumber(double rl, double im) { m_rl = rl; m_im = im; }
三、现在我们给复数加上算术运算的功能
在复数的头文件中加入下述代码:
public: // 重载四则运算符号 // 加 ComplexNumber operator +(const ComplexNumber &c){ return ComplexNumber(m_rl+c.m_rl,m_im+c.m_im); } // 减 ComplexNumber operator -(const ComplexNumber &c){ return ComplexNumber(m_rl-c.m_rl,m_im-c.m_im); } // 乘 ComplexNumber operator *(const ComplexNumber &c){ return ComplexNumber(m_rl*c.m_rl-m_im*c.m_im, m_rl*c.m_im+m_im*c.m_rl); } // 除 ComplexNumber operator /(const ComplexNumber &c) { if ((==c.m_rl) && (==c.m_im)) { qDebug()<<"ERROR: divider is 0!"; return ComplexNumber(m_rl, m_im); } return ComplexNumber((m_rl*c.m_rl + m_im*c.m_im) / (c.m_rl*c.m_rl + c.m_im*c.m_im), (m_im*c.m_rl - m_rl*c.m_im) / (c.m_rl*c.m_rl + c.m_im*c.m_im)); }
四、其他函数
1.设定复数值
void SetValue(double rl, double im); // 定义 void ComplexNumber::SetValue(double rl, double im) // 实现 { m_rl = rl; m_im = im; }
2.取模
double get_mold(); // 定义 double ComplexNumber::get_mold() // 实现 { double mold; mold = sqrt(m_rl*m_rl+m_im*m_im); return mold; }
至此,复数的实现就完成了。
Github代码链接:
https://github.com/851984709/Junjie-Hu/tree/master/code/qt/others/ComplexNumber
如果上述教程或代码中有任何错误,欢迎批评和指证。
二、C++复数的实现的更多相关文章
- C++ 实验 使用重载运算符实现一个复数类
实验目的: 1.掌握用成员函数重载运算符的方法 2.掌握用友元函数重载运算符的方法 实验要求: 1.定义一个复数类,描述一些必须的成员函数,如:构造函数,析构函数,赋值函数,返回数据成员值的函数等. ...
- 20155207 《Java程序设计》实验报告二:Java面向对象程序设计
实验要求 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验内容 一.单元测试 1.三种代码 ...
- gsl 复数
一.复数的表示 复数的两种表示: gsl复数结构的声明和部分宏在gsl_complex.h中,方法的声明和另一部分宏在gsl_complex_math.h.复数的表示(结构)有三种,即float型.d ...
- MATLAB—面向复数和数组的基本运算
文章目录 一.MATLAB基本运算说明 二.面向复数的计算特点 1.基础知识 2.对复数的基本操作 3.复数的开方问题 二.面向数组 1.数组的输入形式 2.对矩阵中的元素进行并行操作 3.利用数组运 ...
- 转自 z55250825 的几篇关于FFT的博文(一)
关于FFT,咱们都会迫不及待地 @ .....(大雾)(貌似被玩坏了...) .....0.0学习FFT前先orz FFT君. 首先先是更详细的链接(手写版题解点赞0v ...
- FFT学习笔记
快速傅里叶变换FFT(Fast Fourior Transform) 先说一下它能干嘛qwq 傅里叶变换有两种,连续傅里叶变换和离散傅里叶变换,OI中主要用来快速计算多项式卷积. 等一下,卷积是啥 ...
- 口胡FFT现场(没准就听懂了)&&FFT学习笔记
前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...
- C++ Opencv 傅里叶变换的代码实现及关键函数详解
一.前言 最近几天接触了图像的傅里叶变换,数学原理依旧不是很懂,因此不敢在这里妄言.下午用Opencv代码实现了这一变换,有一些经验心得,愿与大家分享. 二.关键函数解析 2.1copyMakeBor ...
- 20145307第二次JAVA学习实验报告
20145307<Java程序设计>实验报告二:Java面向对象程序设计 实验要求 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4 ...
- Spring装配各种类型bean
一.单属性值的装配 //setter注入,提供无参构造器,提供setXX方法 <property name="" value=""></pro ...
随机推荐
- Web应用之ActionForm
看链接: 主要就是讲了一下form表单的传递,bean的工作原理. http://blog.csdn.net/java_pengjin/article/details/5987330
- Python中的变量,数据类型
Python中变量的命名规则:以字母和下划线开头,由字母,数字和下划线组成,区分大小写 Python中同样有加减乘除取余运算,还有一个运算符**,相当与幂运算,当然,幂运算的优先级要高于加减乘除 最后 ...
- PHP爬虫入门--简单的登录抓取内容
给同事写一个小工具,抓取月报表然后统计加工.第一反应是做一个爬虫把需要的表和图抓下来,这样就不用再自己去连数据库然后组织表格生成图片之类的. 以上为背景 PHP 写爬虫 说实话我也想用Python的, ...
- 洛谷P2574 XOR的艺术
题目描述 \(AKN\)觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为\(n\)的\(01\)串. 2 ...
- ES6扩展运算符...进行的数组删除
今天写了按照React小书写了Reducer,发现基础真是太重要了,所有关于上层建筑的细节都需要回到下层细节中去寻找,而且现在的基础也由ES3变成了ES6了. const ADD_USER = &qu ...
- 5、python数据类型之元组(tuple)
元组 元组和列表最大的区别是元组中的元素固定,元组不能修改,所以不能对元组进行增.删.改 1.创建 tu = (11,22,33) tu = tuple(11,22,33) tu = tuple([] ...
- 二次开发php
AB模板 http://www.adminbuy.cn/ 码源 (站长之家)http://down.chinaz.com/ 易无袖资源 http://www.ewuxiu.com/ A5码源 htt ...
- Chapter13
package scala /** * Created by EX-CHENZECHAO001 on 2018-04-04. */class Chapter13 { // 13 集合 // 所有的集合 ...
- 026 Remove Duplicates from Sorted Array 从排序数组中删除重复项
给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度.不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点.示例:给定数组: nums ...
- 记录一个直接操作mediawiki数据库遇到的坑
我的mediawiki使用的是postgresql数据库,当你进入到mediawiki数据库时,运行sql select * from pg_tables; 你会发现mediawiki的数据表的sch ...