在 C++ 中从同一类中的另一个方法调用方法
Posted
技术标签:
【中文标题】在 C++ 中从同一类中的另一个方法调用方法【英文标题】:Calling a method from another method in the same class in C++ 【发布时间】:2010-11-02 06:28:09 【问题描述】:我在一个类中为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()
的结果而被调用。
【问题讨论】:
你能说清楚你想要什么吗? 哦,哎呀!我有一个不同的错误导致这个 - 我刚刚修复了。 确保 a 在 b 之前定义,如果 b 正在调用 a 如果 A::a() 中有变量,那么如何访问 A::b() 中的变量? 【参考方案1】:在一种情况下,您可能会得到一些意想不到的结果。也就是说,如果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()
【讨论】:
【参考方案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;
【讨论】:
我收到一个错误:invalid use of 'this' in non-member function
在引用类的方法/属性时使用this
是否更好?
如果A::a()
中有变量,那么如何访问A::b()
中的变量?【参考方案3】:
你在那里写的应该可以正常工作。在 C++ 中,如果您在 b
中调用 a
并且两者都是某个类 A
的实例方法,那么您不需要限定它。 a
和 b
都在彼此的范围内。
【讨论】:
【参考方案4】:看起来您在块中编写的代码可以正常工作。只需确保在类中正确定义了 a() 和 b() 方法即可。
【讨论】:
【参考方案5】:这正是你正在做的。
【讨论】:
答案^^^这里没有用;下面的+44分更有洞察力。从长远来看,我建议更改顺序。我将解释原因:我是通过 Google 来到这里的,但答案对我没有帮助 - 但下面的语法答案让我意识到我只是忘记了一个 ()。因此,下面 +44 分的答案对我的案例更有帮助,而“你在做什么”评论实际上几乎没有添加任何内容。以上是关于在 C++ 中从同一类中的另一个方法调用方法的主要内容,如果未能解决你的问题,请参考以下文章
使用Swing时的Java方法 - 可以在同一个类中的另一个事件方法中调用event方法吗?