假设我在一个类中有私有数据成员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?
发布于 2016-04-19 17:31:31
示例:
#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;
}发布于 2016-04-19 17:31:48
只需调用该函数即可。
int a = getX();
int b = getY();类似于
int a,b;
getXY(a,b);发布于 2016-04-19 17:49:23
使用单值getter函数是简单而有效的:
void needs_x_only( Foo const& object )
{
int const x = object.x(); // Using single item getter function.
(void) x;
}如果x()函数为inline,编译器很可能会将其优化为直接访问相关的数据成员。
将多项getter设计为带有输出参数的例程,如果您不需要所有的项,则使用多项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;
}https://stackoverflow.com/questions/36714253
复制相似问题