Подтвердить что ты не робот

Вызов метода из другого метода в том же классе в С++

Я написал метод (который отлично работает) для 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().

4b9b3361

Ответ 1

Это именно то, что вы делаете.

Ответ 2

То, что у вас есть, должно работать нормально. Вы можете использовать "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;
}

Ответ 3

Похоже, что код, который вы написали в своем блоке, будет работать нормально. Просто убедитесь, что у вас есть как методы a(), так и b(), определенные внутри вашего класса.

Ответ 4

То, что вы там написали, должно работать нормально. В С++, если вы вызываете a внутри b, и оба являются методами экземпляра некоторого класса a, тогда вам не нужно его квалифицировать. Оба a и b находятся в области видимости других.

Ответ 5

Есть один случай, когда вы можете иметь слегка неожиданные результаты. То есть, если 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()
}