2014-04-27 35 views
1

考慮類爪哇當量爲C++運算符重載

public class Complex 
{ 
    private double x; 
    private double y; 

    public Complex(double x , double y) 
    { 
     this.x = x; 
     this.y = y; 
    } 
} 

即表示複數x + y*i,其中i是虛部。

我主要有如下:

public static void main(String args[]) 
{ 
    Complex p1 = new Complex(1 , 2); // ok 
    Complex p2 = new Complex(3 , 4); // ok 
    Complex p3 = p1 + p2; // Not ok , doesn't compile 
} 

第三行Complex p3 = p1 + p2;不能編譯,因爲沒有運營商的Java重載 。它可以在C++中工作。

任何方法(在Java中)?

非常感謝

+1

定義一個'add'方法。 –

+1

你需要一個'OperatorFactory'單例。你可以通過一個'ManagedAbstractOperatorBean'的依賴注入來獲得一個,當然它應該包含一些合適的包裝。 –

+0

看看這個:http://stackoverflow.com/questions/18550771/adding-and-subtract-complex-numbers-using-oop-structure –

回答

1

沒有運營商的Java超載在C/C++世界的,+運營商使用,我們只能說,對於基本數字(byteshortintlongfloatdouble )增量操作。

這種說法你不應該抱怨或感到驚訝,當你發現一個特殊的情況下,+運算符超載String類。

String s1 = "Hello "; 
String s2 = "World"; 
String helloWorld = s1 + s2; 

看在上面的代碼中的最後一行,這是完全合法的,並會導致一個級聯String和編譯器不會抱怨。 請記住,這是唯一的例外

所以不是超載了一些運營商,您可以無縫地實現該處理的另外的東西的方法:

public class Complex 
{ 
    private double x; 
    private double y; 

    public Complex(double x , double y) 
    { 
    this.x = x; 
    this.y = y; 
    } 

    public Complex add (Complex c) 
    { 
    Complex sum = new Complex(); 
    sum.x = this.x + c.x; 
    sum.y = this.y + c.y; 
    return sum; 
    } 

} 

public static void main(String args[]) 
{ 
    Complex p1 = new Complex(1 , 2); 
    Complex p2 = new Complex(3 , 4); 
    Complex p3 = p2.add(p1); 
} 
2

不是真的沒有。出於各種原因,Java中不支持運算符重載。你可以提供一個添加方法或類似的東西。

3

運算符重載在Java中是不可能的。你必須做的是實現操作的方法。

BigDecimal的是應如何在Java中做一個很好的例子:

http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html

注意BigDecimal爲一個不可變類,這往往是一個很不錯的主意,當你有類,使用C++會有像這樣的操作符超載。它使得代碼更簡潔,易於維護。