2013-05-06 65 views
-1

我是Java新手,但我對C++有很多經驗。有一件事我想在Java中完成,只能用C++中的指針完成。由於代碼解釋超過一千個字:Java中的C++ OOP指針技巧

class Parent; 
class Kid; 

class Parent{ 
public: 
    Parent(); 
private: 
    Kid *kid; 
}; 

class Kid{ 
public: 
    Kid(Parent*); 
private: 
    Parent *parent; 
}; 

Parent::Parent(){ 
    //give self 
    kid = new Kid(this); 
} 

Kid::Kid(Parent* parent){ 
    //kid can now adress the class containing the instance 
    parent = parent; 
} 

那麼,這是可能的在Java中,以及如何?

+0

所以,你希望創建一個循環引用? – Tom 2013-05-06 16:14:25

+1

Java有引用和'this'關鍵字。使用Java的引用,你應該能夠用C++中的指針做很多事情。你只是不能做像指針算術之類的東西,或者把原始地址或指針的地址作爲參考來傳遞它。 – DaoWen 2013-05-06 16:17:27

回答

2

你是正確的,在Java中沒有「指針」,但在實踐中,對對象的所有引用的功能很像指針。所以,只要變量,字段或參數引用一個對象,它就會「指向」內存中的某個特定對象。

所以,在Java中,你的代碼看起來像:

class Parent { 
    private Kid kid; 
    public Parent() { 
     kid = new Kid(this); 
    } 
} 

class Kid { 
    private Parent parent; 
    public Kid(Parent p) { 
     parent = p; 
    } 
} 
1

這在Java中很容易。對象類型的所有Java變量都是引用。所以Kid可以有一個引用Parent對象的Parent字段。

public class Parent{ 
    private Kid kid; 
    public Parent() { 
     kid = new Kid(this); 
    } 
} 

public class Kid { 
    private Parent parent; 
    public Kid(Parent p) { 
     parent = p; // Copies the *reference* to the parent, not the object itself. 
    } 
} 
1

在java中,您用new創建的每個對象實際上都是一個引用,即一個指針。因此,只需用「新」創建一切,你就會好起來的。

public class Parent{ 
public Parent() { kid = new Kid(this) } 
private Kid kid; 
} 

public class Kid{ 

public Kid(Parent parent){ this.parent = parent } 
private Parent parent; 
};