Appeler une méthode d'une autre méthode dans la même classe en C++

j'ai écrit une méthode (qui fonctionne très bien) pour a() dans une classe. Je veux écrire une autre méthode de la classe qui appelle la première méthode:

void A::a() {
  do_stuff;
}

void A::b() {
  a();
  do_stuff;
}

je suppose que je pourrais juste de réécriture b()b(A obj) mais je ne veux pas. En java, pouvez-vous faire quelque chose comme this.a().

je veux faire obj.b()obj.a() serait appelé à la suite de obj.b().

27
demandé sur sth 2009-06-12 00:02:35

5 réponses

C'est exactement ce que vous faites.

18
répondu ralphtheninja 2009-06-11 20:05:31

Ce que vous avez devrait fonctionner correctement. Vous pouvez utiliser "ce" si vous voulez:

void A::b() {
  this->a();
  do_stuff;
}

ou

void A::b() {
  this->A::a();
  do_stuff;
}

ou

void A::b() {
  A::a();
  do_stuff;
}

mais ce que vous avez devrait également fonctionner:

void A::b() {
  a();
  do_stuff;
}
33
répondu Eclipse 2009-06-11 20:07:17

il semble que le code que vous avez écrit dans votre bloc fonctionnerait très bien. Assurez-vous juste que vous avez à la fois les méthodes A() et b() définies à l'intérieur de votre classe correctement.

4
répondu Tim Rupe 2009-06-11 20:06:42

ce que vous y avez écrit devrait bien fonctionner. En C++ si vous appelez a à l'intérieur de b et les deux sont des méthodes d'instance de la classe A, alors vous n'avez pas besoin de le préciser. Les deux a et b sont dans la portée.

2
répondu tgamblin 2009-06-11 20:07:03

il y a un cas dans lequel vous pourriez avoir des résultats légèrement inattendus. C'est si A::a() est virtuel, obj a en fait le type DerivedFromA, et DerivedFromA::remplace A::a. Dans ce cas, la simple appel a(); ou le plus de commentaires this->a(); ne pas appeler Un::mais DerivedFromA::a().

maintenant, c'est probablement l'intention, puisque la classe A a déclaré a() être virtuelle. Mais si vous ne le pensez vraiment pas, vous pouvez ignorer le virtuel en écrivant l'appel soit comme

void A::b()
{
    A::a(); // or
    this->A::a(); //Both ignore the virtual-ness of a()
}    
2
répondu MSalters 2009-06-12 15:08:07