在C++中调用方法
Calling method on method in C++
在OpenFoam源代码的方法bool Foam::pimpleControl::criteriaSatisfied()
中,我发现了以下表达式:
bool Foam::pimpleControl::criteriaSatisfied()
{
// ...
const word& variableName = iter().keyword();
// ...
}
对于iter()
,我发现: Foam::label
iter()
常量内联返回对当前云迭代的常量访问权限
对于keyword()
:
keyType& keyword() inline
返回对关键字的非常量访问。
我对此有两个问题:
在像
iter().keyword();
这样的方法上调用方法是什么意思?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()"。
相关文章:
- 如何强制从重写方法调用重写的方法基方法?
- C++:使用方法调用析构函数的顺序是什么?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 使用 object 中的方法调用带有 std::bind 和 std::function.target 的 C 样式函数
- 指向类方法调用的指针
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 是否有可以处理方法调用依赖关系的设计模式?
- 如何缩短C++中的方法调用?
- 从部分专用模板方法调用模板非静态方法
- 有没有办法禁止派生类中的基类方法调用?
- 为什么这C++只在编译器上编码一个不明确的方法调用Microsoft?
- 从父方法调用子方法
- 如何将子方法调用到父方法
- 虚拟函数在哪里使用 vpointer to vtable 来解析方法调用,非虚拟方法存储在哪里以及如何解析它们?
- 从静态方法调用静态函数指针
- 从同一类中的另一个方法调用方法时出错
- 方法调用意外地像 l 值一样起作用
- 无法从派生的一个方法调用基类方法
- 从类方法调用命名空间中名为 Same 的函数时,重载解析失败
- C 多线程JAVA JNI方法调用