2009-06-11 4 views
26

Я написал метод (который отлично работает) для a() в классе. Я хочу написать еще один метод в этом классе, который вызывает первый метод так:Вызов метода из другого метода в том же классе в C++

void A::a() { 
    do_stuff; 
} 

void A::b() { 
    a(); 
    do_stuff; 
} 

Я полагаю, я мог бы просто переписать b() так b(A obj), но я не хочу. В java вы можете сделать что-то вроде this.a().

Я хочу сделать obj.b(), где obj.a() будет называться в результате obj.b().

+2

Можете уточнить, что вы хотите? –

+0

Ох! У меня была другая ошибка, вызывающая это, что я только что исправил. – devin

+2

убедитесь, что a определено до b, если b вызывает –

ответ

4

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

2

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

29

Что вы должны работать нормально. Вы можете использовать "это", если вы хотите:

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; 
} 
+1

. Я получаю сообщение об ошибке: 'недопустимое использование 'this' в функции, не являющейся членом. –

+0

- лучше использовать' this' при использовании методов/свойств класс? – gen

2

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

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

Смежные вопросы