在 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 的实例方法,那么您不需要限定它。 ab 都在彼此的范围内。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

这正是你正在做的。

【讨论】:

答案^^^这里没有用;下面的+44分更有洞察力。从长远来看,我建议更改顺序。我将解释原因:我是通过 Google 来到这里的,但答案对我没有帮助 - 但下面的语法答案让我意识到我只是忘记了一个 ()。因此,下面 +44 分的答案对我的案例更有帮助,而“你在做什么”评论实际上几乎没有添加任何内容。

以上是关于在 C++ 中从同一类中的另一个方法调用方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 System.exit() 调用同一类中的另一个方法

使用Swing时的Java方法 - 可以在同一个类中的另一个事件方法中调用event方法吗?

如何从同一类中的另一个方法检索最后插入的 id?

如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]

如何将一个类函数传递给同一个类中的另一个?

Python 3 - 调用方法来更改类中的另一个方法