2012-01-27 63 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; 
} 

作品相當漂亮。