【问题标题】:Calling a method from another method in the same class in C++在 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() 中的变量?

标签: c++ methods


【解决方案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 分的答案对我的案例更有帮助,而“你在做什么”评论实际上几乎没有添加任何内容。
        猜你喜欢
        • 1970-01-01
        • 2014-11-07
        • 1970-01-01
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        相关资源
        最近更新 更多