Ответ 1
Это именно то, что вы делаете.
Я написал метод (который отлично работает) для a()
в классе. Я хочу написать другой метод в этом классе, который вызывает первый метод так:
void A::a() {
do_stuff;
}
void A::b() {
a();
do_stuff;
}
Я предполагаю, что могу просто переписать b()
так b(A obj)
, но я не хочу этого делать. В java вы можете сделать что-то вроде this.a()
.
Я хочу сделать obj.b()
, где obj.a()
будет вызван в результате obj.b()
.
Это именно то, что вы делаете.
То, что у вас есть, должно работать нормально. Вы можете использовать "this", если хотите:
void A::b() {
this->a();
do_stuff;
}
или
void A::b() {
this->A::a();
do_stuff;
}
или
void A::b() {
A::a();
do_stuff;
}
но то, что у вас есть, должно также работать:
void A::b() {
a();
do_stuff;
}
Похоже, что код, который вы написали в своем блоке, будет работать нормально. Просто убедитесь, что у вас есть как методы a(), так и b(), определенные внутри вашего класса.
То, что вы там написали, должно работать нормально. В С++, если вы вызываете a
внутри b
, и оба являются методами экземпляра некоторого класса a
, тогда вам не нужно его квалифицировать. Оба a
и b
находятся в области видимости других.
Есть один случай, когда вы можете иметь слегка неожиданные результаты. То есть, если A::a()
является виртуальным, obj
имеет тип DerivedFromA
, а DerivedFromA:: a переопределяет A::a
. В этом случае простой вызов a();
или более подробный this->a();
не будет вызывать A:: a, а DerivedFromA:: a().
Теперь это, вероятно, предназначено, так как класс A объявил a() виртуальным. Но если вы действительно не имеете в виду это, вы можете игнорировать виртуальный, написав вызов либо как
void A::b()
{
A::a(); // or
this->A::a(); //Both ignore the virtual-ness of a()
}