2016-04-19 3 views
1

私はプライベートデータメンバーint xとint yをクラスに持っているとしましょう。同様の仕事を行うことができます別の関数があるようですvoid function(C++)でデータメンバーを取得する

int getX() { return x; } 
int getY() { return y; } 

:私はを通じて、私は例えば、それぞれのデータメンバを取得することができます知っている

私が行うには、この機能を使用するにはどうすればよい
void getXY(int &aX, int &aY) const {aX = x; aY = y;} 

上のものと同じもの---それぞれxとyを得る?

+0

あなたはまだ何がここで質問です、というん機能を書きましたか? C++で関数を呼び出す方法は? – Lundin

答えて

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

あなたは単に関数を呼び出すことによってそれを行います。

int a = getX(); 
int b = getY(); 

単一の値のgetter関数を使用して

int a,b; 
getXY(a,b); 
1

に似てシンプルかつ効率的である:

void needs_x_only(Foo const& object) 
{ 
    int const x = object.x(); // Using single item getter function. 
    (void) x; 
} 

x()機能は、コンパイラはおそらくこれをダウン最適化するinlineある場合関連するデータメンバーの直接アクセス。

out-argumentsを持つルーチンとして設計された複数項目ゲッターを使用すると、すべての項目を必要としない場合はあまり明確でなくなり、引数としてconstを使用できなくなります。 const(一般的には望ましい)をサポートする1​​つの方法は、小さなラッパー関数を書くことです。例えば、ここ

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; 
} 
関連する問題