J'ai écrit une méthode (qui fonctionne très bien) pour a()
dans une classe. Je veux écrire une autre méthode dans cette classe qui appelle la première méthode ainsi:
void A::a() {
do_stuff;
}
void A::b() {
a();
do_stuff;
}
Je suppose que je pourrais simplement réécrire b()
donc b(A obj)
mais je ne veux pas. Dans Java pouvez-vous faire quelque chose comme this.a()
.
Je veux faire obj.b()
où obj.a()
serait appelé à la suite de obj.b()
.
C'est exactement ce que tu fais.
Ce que vous avez devrait bien fonctionner. Vous pouvez utiliser "ceci" si vous souhaitez:
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 aussi 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 simplement que les méthodes a() et b() sont correctement définies dans votre classe).
Il y a un cas dans lequel vous pourriez avoir des résultats légèrement inattendus. C'est-à-dire si A::a()
est virtuel, obj
a en fait le type DerivedFromA
et DerivedFromA :: a remplace A::a
. Dans ce cas, le simple appel a();
ou le plus verbeux this->a();
n'appellera pas A :: a mais DerivedFromA :: a ().
Maintenant, cela est probablement prévu, car la classe A a déclaré que a() était virtuel. 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()
}
Ce que vous y avez écrit devrait bien fonctionner. En C++ si vous appelez a
dans b
et que les deux sont des méthodes d'instance d'une classe A
, vous n'avez pas besoin de la qualifier. a
et b
sont dans la portée de l'autre.