2016-04-19 11 views
1

Angenommen, ich habe private Datenelemente int x und int y in einer Klasse. Ich weiß, ich kann jeweils die Datenelemente erhalten, zum Beispiel durch:Abrufen von Datenelementen durch void-Funktion (C++)

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

Es scheint eine andere Funktion zu sein, die die ähnlichen Aufgaben erledigen können:

void getXY(int &aX, int &aY) const {aX = x; aY = y;} 

Wie kann ich diese Funktion nutzen zu tun etwas das gleiche wie oben - um x bzw. y zu erhalten?

+0

Sie schrieb bereits die Funktion, die das tut, so etwas ist hier die Frage? Wie ruft man eine Funktion in C++ auf? – Lundin

Antwort

1

Beispiel:

#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

Sie tun es, indem sie einfach die Funktion aufrufen.

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

Ist ähnlich wie

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

ein einzelner Wert Getter-Funktion zu verwenden ist einfach und effizient:

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

Wenn die x() Funktion inline der Compiler die meisten ist, wird dies wahrscheinlich optimieren bis zu ein direkter Zugriff des relevanten Datenmitglieds.

Die Verwendung eines Getter-Objekts mit mehreren Elementen, das als Routine mit Aus-Argumenten entworfen wurde, kann weniger klar sein, wenn Sie nicht alle Elemente benötigen und die Verwendung von const für die Argumente verhindert. Eine Möglichkeit, const zu unterstützen (was allgemein wünschenswert ist), besteht darin, eine kleine Wrapper-Funktion zu schreiben. Z. B.

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

Hier Point ist einige Klasse, die struct einen 2D-Punkt definiert.

Dann die Hülle verwenden kann wie folgt aussehen:

void needs_both_x_and_y(Foo const& object) 
{ 
    Point<int> const position = position_of(object); 
    (void) position; 
} 
Verwandte Themen