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()
où obj.a()
serait appelé à la suite de obj.b()
.
5 réponses
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;
}
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.
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.
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()
}