我在类中为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}}。
答案 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
的实例方法,那么您不需要对其进行限定。 a
和b
都在彼此的范围内。
答案 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()
}