2013-08-06 102 views
0

因此,我一直在嘗試在過去幾周學習C++。我傾向於用C++編寫代碼時用java邏輯思考。將自己作爲參數傳遞的類

所以說,在Java中我有這樣的代碼:

public class Entity { 
    public Entity(){ 
     Foobar foobar = new Foobar(this); 
    } 

    public void randomMethod(){ 
     System.out.println("I am an entity"); 
    } 
} 

public class Foobar{ 
    public Foobar(Entity e){ 
     e.randomMethod(); 
    } 
} 

當我創建的Foobar的一個實例,我想通過它被實例化的實體類,到Foobar的構造。我很難在C++中實現相同的代碼。

編輯 基本上,我希望在另一個類中實例化的對象知道它是容器類。

+2

您是否已經編寫了任何C++代碼?所以我們可以從那裏工作? –

+1

你的代碼將OOME。 –

+1

該代碼沒有意義。您將遞歸調用自己,直到StackOverflow。 – splungebob

回答

0

與Java(它不可見)不同,在C++中,你必須自己指定pointers

如果要引用現有對象,則在調用方法時必須添加&,並且必須指定參數*以指示它是指針。

public: Foobar(Entity* e) 
{ // logic here 
} 

public: Entity() { 
    Foobar foobar = new Foobar(this); 
} 
+0

這看起來像是Java和C++之間的一種咀嚼......而且你可能不想做'&this' - '這'應該夠了。 –

+0

'&'用於通用內存指針傳遞 – bas

+3

'public'必須跟一個冒號。 'this'是一個指針。 '&this'是指針的地址。 '&這個'是不合格的。因此你的代碼無效。 –

1

這是問題中Java代碼的C++版本。希望這可以幫助。

class Entity { 
public: 
    Entity(); 
    void randomMethod(); 
}; 

class Foobar : public Entity { 
public: 
    Foobar(Entity *e); 
}; 

Foobar::Foobar(Entity *e) { 
    e->randomMethod(); 
} 

Entity::Entity() { 
    Foobar *foobar = new Foobar(this); 
} 

void Entity::randomMethod() { 
    std::cout << "I am an entity"; 
}