从C ++中的同一个类中的另一个方法调用方法

时间:2009-06-11 20:02:35

标签: c++ methods

我在类中为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()而调用{{1}}。

5 个答案:

答案 0 :(得分:39)

你所拥有的应该工作得很好。如果您愿意,可以使用“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;
}

答案 1 :(得分:20)

这正是你在做什么。

答案 2 :(得分:4)

看起来您在块中编写的代码可以正常工作。只需确保你的类中定义了a()和b()方法。

答案 3 :(得分:2)

你写的内容应该可以正常工作。在C ++中,如果在a内调用b并且两者都是某个类A的实例方法,那么您不需要对其进行限定。 ab都在彼此的范围内。

答案 4 :(得分:2)

有一种情况可能会出现意想不到的结果。也就是说,如果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()
}