2012-01-27 64 views
2

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

实施例:

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

它不编译:

错误C2678:二进制 '*':没有操作员发现这需要类型的左边的操作数“的std ::复杂'(或者没有可接受的转换))。

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

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

回答

3

这可能是一个转换问题。也许指定的常数2作为浮点值:

B = A * 2.0 + A; 
+0

是的,这样它的工作原理 – Ale 2012-01-27 20:01:22

+0

所以如果我有一个整数值,首先我需要转换它,是吗? – Ale 2012-01-27 20:02:45

+0

@Ale:如果通过转换,你的意思是转换,然后是'B = A *(double) myint + A;' – 2012-01-27 20:07:05

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); 
} 
+0

我不知道如何使用它。我必须在我的课堂上实施它们吗? – Ale 2012-01-27 20:01:08

+0

你可以在课堂内外都实现它。我写的是用于外部声明。如果号码是“私人”,它们必须是“朋友”功能。为了声明它们,你只需要提供右手操作数。 – 0605002 2012-01-27 20:04:02

+0

好的,非常感谢 – Ale 2012-01-27 20:05:29

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; 
} 

作品相当漂亮。