一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

在数字图像处理领域,复数这一类型会被经常使用到。但是在C++和Qt中都没有可以使用的复数类。为了今后的方便,我们可以自己定义一个C++复数类,以便将来使用。

一、复数的属性

复数包含实数部分和虚数部分,如果直接使用 a + ib 的模式会使得后面的一系列操作变得较为复杂。这里我们直接给复数定义两个成员变量 m_rl 和 m_im。

1 public:
2     double m_rl,m_im;

二、我们同样需要构造函数来初始化复数实例

1 public:
2     ComplexNumber(double rl,double im);
3     ComplexNumber();

它们的实现如下:

复制代码
 1 ComplexNumber::ComplexNumber()
 2 {
 3     m_rl = 0;
 4     m_im = 0;
 5 }
 6 
 7 ComplexNumber::ComplexNumber(double rl, double im)
 8 {
 9     m_rl = rl;
10     m_im = im;
11 }
复制代码

三、现在我们给复数加上算术运算的功能

在复数的头文件中加入下述代码:

复制代码
 1 public:
 2 
 3     // 重载四则运算符号
 4 
 5     //
 6     ComplexNumber operator +(const ComplexNumber &c){
 7         return ComplexNumber(m_rl+c.m_rl,m_im+c.m_im);
 8     }
 9 
10     //
11     ComplexNumber operator -(const ComplexNumber &c){
12         return ComplexNumber(m_rl-c.m_rl,m_im-c.m_im);
13     }
14 
15     //
16     ComplexNumber operator *(const ComplexNumber &c){
17         return ComplexNumber(m_rl*c.m_rl-m_im*c.m_im,
18                              m_rl*c.m_im+m_im*c.m_rl);
19     }
20 
21     //
22     ComplexNumber operator /(const ComplexNumber &c) {
23             if ((0==c.m_rl) && (0==c.m_im)) {
24                 qDebug()<<"ERROR: divider is 0!";
25                 return ComplexNumber(m_rl, m_im);
26             }
27 
28             return ComplexNumber((m_rl*c.m_rl + m_im*c.m_im) / (c.m_rl*c.m_rl + c.m_im*c.m_im),
29 
30                 (m_im*c.m_rl - m_rl*c.m_im) / (c.m_rl*c.m_rl + c.m_im*c.m_im));
31 
32         }
复制代码

四、其他函数

1.设定复数值

复制代码
1 void SetValue(double rl, double im); // 定义
2 void ComplexNumber::SetValue(double rl, double im) // 实现
3 {
4     m_rl = rl;
5     m_im = im;
6 }
复制代码

2.取模

复制代码
1 double get_mold(); // 定义
2 double ComplexNumber::get_mold() // 实现
3 {
4     double mold;
5     mold = sqrt(m_rl*m_rl+m_im*m_im);
6     return mold;
7 }
复制代码

至此,复数的实现就完成了。

posted on   一杯清酒邀明月  阅读(754)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2020-02-21 C++ 回调函数简单示例
2020-02-21 Qt HWND的句柄与QWidget的转换
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示