在C++中调用方法

Calling method on method in C++

本文关键字:方法 调用 C++      更新时间:2023-10-16

在OpenFoam源代码的方法bool Foam::pimpleControl::criteriaSatisfied()中,我发现了以下表达式:

bool Foam::pimpleControl::criteriaSatisfied()
{
    // ...
    const word& variableName = iter().keyword();
    // ...
}

对于iter(),我发现: Foam::label iter()常量内联返回对当前云迭代的常量访问权限

对于keyword()

keyType& keyword() inline返回对关键字的非常量访问。

我对此有两个问题:

  1. 在像iter().keyword();这样的方法上调用方法是什么意思?

  2. word&keyType&&是什么意思?我知道每个方法也有 datatyp 声明,但&有特定的含义吗?

问候斯特雷特

在像iter().keyword();这样的方法上调用方法是什么意思

iter()返回一个对象。 然后keyword()调用该对象的方法。它基本上只是Foam::label temp = iter(); temp.keyword()的简写。

单词和之后或键类型是什么意思?

与号是该类型的一部分。 const word&将类型命名为"对const word的引用"。

您不是在调用"方法上的方法"。"iter()" 返回一个对象,该对象有一个成员 "keyword()"。

代码等效于

Foam::label& it = iter();
it.keyword();

下面是一个简化的示例:

class A {
    int m_i;
public:
    A(int i) : m_i(i) {}
    int GetI() const { return m_i; }
};
class B {
    A m_a;
public:
    B(int i) : m_a(i) {}
    const A& GetA() const { return m_a; }
};
#include <iostream>
int main() {
    B b(42);
    const A& a = b.GetA();
    std::cout << "a.GetI() == " << a.GetI() <<std::endl;
    // above code is directly equivalent to:
    std::cout << "b.GetA().GetI() == " << b.GetA().GetI() <<std::endl;
}

在最后一行中,"b.GetA()" 返回一个临时的匿名 "const A&" 对象,然后我们在该对象上调用 "GetI()"。