复杂数字的操作

时间:2012-01-27 19:52:06

标签: c++

我想知道如何使用复数执行一些简单的操作,而无需单独使用实部和虚部。

示例:

complex<double> A(0.0, 1.0);
complex<double> B;
B = A * 2 + A;

它无法编译:

  

错误C2678:二进制'*':找不到哪个运算符采用'std :: complex'类型的左手操作数(或者没有可接受的转换))。

我读到这是转换问题。这是一个真正的问题,特别是在代码更复杂的情况下。

有没有办法用复数进行操作?

3 个答案:

答案 0 :(得分:3)

这可能是转换问题。也许将常量2指定为浮点值:

B = A * 2.0 + A;

答案 1 :(得分:3)

这是转换问题:

#include <iostream>
#include <complex>
using namespace std;

int main ()
{
  complex<double> A (5.0, 10.0);
  complex<double> B;

  B = A * 2.0 + A; 
  cout << "B = " << B << endl;
  return 0;
} 

效果很好。

答案 2 :(得分:1)

C ++提供运算符重载,这可以是一种非常简单友好的方法来处理它。

Complex operator + (Complex a, Complex b)
{
    return Complex(a.real + b.real, a.imag + b.imag);
}

Complex operator * (Complex a, double b)
{
    return Complex(a.real * b, a.imag * b);
}