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. ubuntu下apache2的cgi-bin中以root权限运行程序

    一,安装apache2 sudo apt-get install apache2 二.配置cgi-bin sudo chmod 777 /var/www/html sudo vim /etc/apac ...

  2. 7.26实习培训日志-Oracle SQL(二)

    Oracle SQL(二) 条件表达式 CASE 语句 或者DECODE 函数,两者均可实现 IF-THEN-ELSE 的逻辑,相比较而言,DECODE 更加简洁 SELECT last_name , ...

  3. Flash builder发布Air程序时设备配置文件supportedProfiles的配置

    1. 发布的程序:需要访问本地进程,那么只能发布为exe程序才可以.   此时supportedProfiles 配置为 extendedDesktop desktop   desktop保证能发布a ...

  4. Eclipse超级有用的快捷键

    1.Alt + Shift + R 重构 2.Ctrl + F11 运行并调试程序 3.Ctrl + Shift + O 自动导入包 4.Ctrl + Shift + F 格式化代码 5.F5 调试模 ...

  5. 洛谷P3694 邦邦的大合唱站队/签到题

    P3694 邦邦的大合唱站队/签到题 题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶 ...

  6. Linux安装 oracle 11g r2

    Linux环境配置 OS:Fedora 15 DB:Oracle 11gR2 将Oracle安装到home/oracle_11目录 配置过程:本文来自Oracle官方文档+网上资料 Oracle官方文 ...

  7. 树状数组的神操作QAQ

    卧槽 厉害了,我的树状数组 1.单点修改,单点查询 用差分数组维护 #include<cstdio> #include<iostream> using namespace st ...

  8. 不建议使用Restsharp

    Restsharp确实是个优秀的插件,它最大的特点是内置了JsonConverter, 在一定程度上简化了HttpWebRequest的使用,在nuget上面有19.3M的下载量,是个很好的证明. 但 ...

  9. PAT甲级——1098 Insertion or Heap Sort (插入排序、堆排序)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90941941 1098 Insertion or Heap So ...

  10. POJ1045 Bode Plot

    题目来源:http://poj.org/problem?id=1045 题目大意: 如图所示的交流电路,假设电路处于稳定状态,Vs为电源电压,w是频率,单位为弧度每秒,t表示时间. 则:V1 = Vs ...