通过void函数获取数据成员(c ++)

时间:2016-04-19 09:29:27

标签: c++

假设我在类中有私有数据成员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?

3 个答案:

答案 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;
}