2013-08-06 31 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"; 
}