二、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 = 0; m_im = 0; } 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 ((0==c.m_rl) && (0==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
如果上述教程或代码中有任何错误,欢迎批评和指证。

浙公网安备 33010602011771号