2011-02-08 1 views
4

Considérez ce qui suit:appeler des fonctions membres à l'intérieur une autre fonction de membre de la même classe en C++, Objective C

class A{ 

    //data members 

    void foo() 
    { 
     bar();//is this possible? or should you say this->bar() note that bar is not static 
    } 
    void bar() 
    { 

    } 
}//end of class A 

Comment appelez-vous les fonctions membres depuis un autre? Et comment les fonctions statiques affectent-elles l'utilisation de 'ceci'. Des fonctions doivent-elles être appelées sur un objet?

Répondre

4

Nawaz est correct: 'ceci' est implicite. La seule exception est si foo était une fonction statique, car dans les fonctions statiques, il n'y a pas de 'ceci'. Dans ce cas, vous ne pouvez pas utiliser bar(), sauf si bar() est également une fonction statique, et vous ne pouvez pas utiliser this-> bar() du tout.

+0

Il y a aussi des cas bizarres où vous appelez un membre non statique d'une base qui n'est pas automatiquement introduit dans la portée actuelle, et vous ne l'avez pas fait explicitement avec une instruction 'using', mais le poster a clairement des choses plus simples à s'inquiéter pour. –

+0

@Tony: Pourriez-vous développer ces cas bizarres? – Namratha

+0

@Namratha: Je n'ai jamais prêté beaucoup d'attention - c'est plutôt une de ces choses que vous apprenez à reconnaître et à corriger quand le compilateur se plaint plutôt que de se souvenir du problème exact, mais de la mémoire vague: si la classe dérivée a une fonction named x() alors x() s dans la classe de base ne sera pas mis dans la portée sauf si explicitement demandé avec 'using'. –

2
bar();//is this possible? or should you say this->bar() 

this est implicite. Donc les deux sont équivalents. Vous pouvez utiliser n'importe lequel d'entre eux. Mais alors je pense, si juste bar() est suffisant, alors pourquoi utiliser this->bar()?

Utilisez this uniquement en cas d'ambiguïté, sinon utilisez la plus simple!

+0

La barre d'appel de la fonction() est-elle autorisée s'il ne s'agit pas d'une fonction statique? N'est-il pas nécessaire d'appeler une barre sur un objet? – Namratha

+0

@Namratha: Ne vous répétez-vous pas? N'ai-je pas dit que les deux étaient équivalents? Pourquoi n'écris-tu pas du code et vois-tu si 'bar()' est appelé ou pas? – Nawaz

+2

Non parce que votre réponse n'est pas claire. Vous n'avez pas répondu à ma question concernant le mot-clé static et quand des fonctions doivent être appelées sur un objet. – Namratha

Questions connexes