假设我在类中有私有数据成员int x和int y。我知道我可以分别获取数据成员,例如:
int getX() { return x; }
int getY() { return y; }
似乎还有另一项功能可以完成类似的工作:
void getXY(int &aX, int &aY) const {aX = x; aY = y;}
如何使用此函数执行与上述相同的操作 - 分别获取x和y?
答案 0 :(得分:1)
示例:
#include <iostream>
using namespace std;
class foo {
int x = 2, y = 3;
public:
void xy(int &x, int &y) const {
x = this->x;
y = this->y;
}
};
int main() {
int x, y;
foo{}.xy(x, y);
cout << x << " " << y << endl;
return 0;
}
答案 1 :(得分:1)
只需调用该函数即可完成。
int a = getX();
int b = getY();
类似于
int a,b;
getXY(a,b);
答案 2 :(得分:1)
使用单值getter函数简单而有效:
void needs_x_only( Foo const& object )
{
int const x = object.x(); // Using single item getter function.
(void) x;
}
如果x()
函数为inline
,编译器很可能将其优化为直接访问相关数据成员。
如果您不需要所有项目,那么使用设计为具有out-arguments的例程的多项目getter可能会更不清楚,并且它会阻止使用const
作为参数。支持const
(通常是可取的)的一种方法是编写一个小包装函数。如,
auto position_of( Foo const& object )
-> Point<int>
{
int x;
int y;
object.get_xy( x, y ); // Using out-arguments getter routine.
return {x, y};
}
此处Point
是一个定义2D点struct
的类。
然后使用包装器可以看起来像这样:
void needs_both_x_and_y( Foo const& object )
{
Point<int> const position = position_of( object );
(void) position;
}