首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过空函数(c++)获取数据成员

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

Stack Overflow用户
提问于 2016-04-19 17:29:27
回答 3查看 60关注 0票数 1

假设我在一个类中有私有数据成员int x和int y。我知道我可以分别获取数据成员,例如,通过:

代码语言:javascript
复制
int getX() { return x; } 
int getY() { return y; }

似乎还有另一个函数可以做类似的工作:

代码语言:javascript
复制
void getXY(int &aX, int &aY) const {aX = x; aY = y;}

我如何使用这个函数来做一些与上面相同的事情-分别获得x和y?

EN

回答 3

Stack Overflow用户

发布于 2016-04-19 17:31:31

示例:

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2016-04-19 17:31:48

只需调用该函数即可。

代码语言:javascript
复制
int a = getX();
int b = getY();

类似于

代码语言:javascript
复制
int a,b;
getXY(a,b);
票数 1
EN

Stack Overflow用户

发布于 2016-04-19 17:49:23

使用单值getter函数是简单而有效的:

代码语言:javascript
复制
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的一种方法(通常是可取的)是编写一个小的包装器函数。例如,

代码语言:javascript
复制
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的类。

然后,包装器的使用如下所示:

代码语言:javascript
复制
void needs_both_x_and_y( Foo const& object )
{
    Point<int> const position = position_of( object );
    (void) position;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36714253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档