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++复数的实现的更多相关文章

  1. C++ 实验 使用重载运算符实现一个复数类

    实验目的: 1.掌握用成员函数重载运算符的方法 2.掌握用友元函数重载运算符的方法 实验要求: 1.定义一个复数类,描述一些必须的成员函数,如:构造函数,析构函数,赋值函数,返回数据成员值的函数等. ...

  2. 20155207 《Java程序设计》实验报告二:Java面向对象程序设计

    实验要求 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验内容 一.单元测试 1.三种代码 ...

  3. gsl 复数

    一.复数的表示 复数的两种表示: gsl复数结构的声明和部分宏在gsl_complex.h中,方法的声明和另一部分宏在gsl_complex_math.h.复数的表示(结构)有三种,即float型.d ...

  4. MATLAB—面向复数和数组的基本运算

    文章目录 一.MATLAB基本运算说明 二.面向复数的计算特点 1.基础知识 2.对复数的基本操作 3.复数的开方问题 二.面向数组 1.数组的输入形式 2.对矩阵中的元素进行并行操作 3.利用数组运 ...

  5. 转自 z55250825 的几篇关于FFT的博文(一)

        关于FFT,咱们都会迫不及待地 @  .....(大雾)(貌似被玩坏了...)    .....0.0学习FFT前先orz FFT君.         首先先是更详细的链接(手写版题解点赞0v ...

  6. FFT学习笔记

    快速傅里叶变换FFT(Fast Fourior Transform) 先说一下它能干嘛qwq ​ 傅里叶变换有两种,连续傅里叶变换和离散傅里叶变换,OI中主要用来快速计算多项式卷积. 等一下,卷积是啥 ...

  7. 口胡FFT现场(没准就听懂了)&&FFT学习笔记

    前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...

  8. C++ Opencv 傅里叶变换的代码实现及关键函数详解

    一.前言 最近几天接触了图像的傅里叶变换,数学原理依旧不是很懂,因此不敢在这里妄言.下午用Opencv代码实现了这一变换,有一些经验心得,愿与大家分享. 二.关键函数解析 2.1copyMakeBor ...

  9. 20145307第二次JAVA学习实验报告

    20145307<Java程序设计>实验报告二:Java面向对象程序设计 实验要求 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4 ...

  10. Spring装配各种类型bean

    一.单属性值的装配 //setter注入,提供无参构造器,提供setXX方法 <property name="" value=""></pro ...

随机推荐

  1. HDU 5980 Find Small A (水题)

    题意:众所周知,字符 'a' 的ASCII码为97.现在,找出给定数组中出现了多少次 'a' .注意,此处的数字为计算机中的32位整数.这表示, 1个数字由四个字符组成(一个字符由8位二进制数组成). ...

  2. 【转】Subversion快速入门教程-动画演示

    如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关心的问题,与CVS相比,Subversion有更多的选择,也更加的容易,几个命令就可以建立一套服务器环境,可以使用起来,这里配 ...

  3. Linux的.run文件简单制作

    run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示: |-----------------|| || 安装脚本 || ||-----------------|| || 程序 || ||-- ...

  4. 33、生鲜电商平台-定时器,定时任务quartz的设计与架构

    说明:任何业务有时候需要系统在某个定点的时刻执行某些任务,比如:凌晨2点统计昨天的报表,早上6点抽取用户下单的佣金. 对于Java开源生鲜电商平台而言,有定时推送客户备货,定时计算卖家今日的收益,定时 ...

  5. 799C(xjb)

    题目链接: http://codeforces.com/problemset/problem/799/C 题意: 有c, d两种货币, 有 n 个货物, 可以用 c 货币或者 d 货币购买, 现在需要 ...

  6. CF447B DZY Loves Strings 贪心

    DZY loves collecting special strings which only contain lowercase letters. For each lowercase letter ...

  7. CF987C Three displays 解题报告

    题目传送门 题目大意 n个位置,每个位置有两个属性s,c,要求选择3个位置i,j,k,使得s_i<s_j<s_k​,并使得c_i+c_j+c_k最小 方法1 n³枚举每一种情况(也许可以拿 ...

  8. PHP与thinkphp中var_dump()打印数组显示不全问题

    在我们进行php开发的时候,经常会使用var_dump()函数进行数组的打印,以方便我们程序的调试,而有时候我们在进行多维数组打印的时候会发现多维数组打印不全,有些地方被…代替,这就是我们php配置的 ...

  9. 安全性测试入门 (五):Insecure CAPTCHA 验证码绕过

    本篇继续对于安全性测试话题,结合DVWA进行研习. Insecure Captcha不安全验证码 1. 验证码到底是怎么一回事 这个Captcha狭义而言就是谷歌提供的一种用户验证服务,全称为:Com ...

  10. C# 用正则表达式判断字符串是否为纯数字

    Regex regex = new System.Text.RegularExpressions.Regex("^(-?[0-9]*[.]*[0-9]{0,3})$"); stri ...