Вызов метода из другого метода того же класса в C ++ - PullRequest
29 голосов
/ 12 июня 2009

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

Ответы [ 5 ]

39 голосов
/ 12 июня 2009

То, что у вас должно работать нормально. Вы можете использовать «это», если хотите:

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;
}
21 голосов
/ 12 июня 2009

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

4 голосов
/ 12 июня 2009

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

2 голосов
/ 12 июня 2009

В одном случае вы можете получить несколько неожиданные результаты. То есть, если A::a() является виртуальным, obj на самом деле имеет тип DerivedFromA, а DerivedFromA :: a переопределяет A::a. В этом случае простой вызов a(); или более подробный this->a(); вызовет не A :: a, а DerivedFromA :: a ().

Теперь, это, вероятно, предназначено, так как класс A объявил () как виртуальный. Но если вы действительно не имеете это в виду, вы можете игнорировать виртуальное, записав вызов либо как

void A::b()
{
    A::a(); // or
    this->A::a(); //Both ignore the virtual-ness of a()
}    
2 голосов
/ 12 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...