2010-09-01 9 views
2

Je suis dans une fonction en Java et créer un nouvel objet « this » comme paramètre:java « this » en C++

class AClass { 
    AClass(TestClass testClass) { } 
} 

class TestClass { 
    AClass doSomething() 
    { 
     return new AClass(this); 
    } 
} 

Comment faire en C++?

devrait être:

class AClass { 
    AClass(TestClass* testClass) { } 
}; 

class TestClass { 
    AClass* doSomething() 
    { 
     return new AClass(*this); 
    } 
}; 

Dois-je passer * cela, ou & cela?

+6

Vous devriez obtenir [un bon livre d'introduction] (http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list) si vous n'en avez pas. Mis à part l'utilisation de moustaches (désolé, je veux dire accolades), C++ n'est pas très similaire à Java du tout. –

Répondre

1

Cela dépend. Vous êtes probablement pour cela:

class AClass { 
    AClass(TestClass& testClass) { } 
}; 

class TestClass { 
    AClass doSomething() 
    { 
     return AClass(*this); 
    } 
}; 

Pour l'utiliser en C++:

TestClass testClass; 
AClass aClass = testClass.doSomething(); 

Mais qu'est-ce que vous essayez vraiment faire? Contrairement à Java, C++ distingue explicitement les valeurs et les références. Vous devriez vraiment read a good beginner's C++ book, comme James McNellis l'a suggéré.

La distinction entre valeurs/références/pointeurs que fait C++ est fondamentale pour le langage et ne pas respecter cela conduira à un désastre. Encore une fois, veuillez prendre un livre C++.

+0

de cette façon que vous copiez le TestClass en passant * ceci? Mais le constructeur s'appelle comme ça: AClass (TestClass testClass) {} mais si je mets "return &this;" le constructeur AClass devrait être: AClass (TestClass * testClass) {}? – okami

+0

Encore une fois, cela dépend, puisque C++ fait la distinction entre les valeurs et les références explicites. Passer '* this' à' AClass (TestClass testClass) 'fait une copie, tout en passant' * this' à AClass (TestClass & testClass) 'ne le fait pas. C'est l'une des différences fondamentales de Java - je recommande un bon livre C++ car il dépasse de beaucoup la portée de cette réponse. –

+0

Je souhaite passer la classe TestClass comme référence – okami

0

la déclaration constatant vous avez écrit

class AClass { 
    AClass(TestClass* testClass) { } 
}; 

Vous devez passer un pointeur, donc vous devriez utiliser this. Cependant, il est généralement préféré en C++ d'utiliser des références (en particulier const références) au lieu de pointeurs, de sorte que vous souhaitez déclarer AClass comme:

class AClass { 
    AClass(const TestClass& testClass) { } 
}; 

Pour que vous passeriez *this.

Maintenant, il existe des situations dans lesquelles la version du pointeur est préférée. Par exemple, si testClass ont été autorisés à être NULL (vous ne pouvez pas avoir de références nulles). Ou si testClass ont été stockés dans une structure de données std::vector ou similaire. (Vous ne pouvez pas avoir des tableaux de références.)

+0

très bon, const est très utile en C++ beaucoup plus que java "final" – okami