2015-12-08 2 views
0

Je vais aller droit au but. Pour être honnête, je pense qu'il y a une réponse à cela, mais je ne sais pas comment le dire.Faire une fonction retourner quelque chose avec des propriétés différentes

int playerXCoord = Player.getPosition().x 
//this is just an example 

Comment définissez-vous quelque chose en C++? Je connais les classes et les instances, mais j'aimerais savoir comment procéder (en C/C++).

+0

Avez-vous recherché [Google] (http://google.com)? –

+0

Dans votre exemple, vous accédez au membre 'x' de la chose retournée par' Player.getPosition() '- est-ce que vous voulez? –

+0

@JonnyHenly Oui, je n'ai rien trouvé. Je crois que je suis la formulation mauvaise recherche – Ricky

Répondre

2

Quelque chose comme ça peut-être:

class Player 
{ 
public: 
    struct Coordinates 
    { 
     int x; 
     int y; 
    }; 

    Coordinates const& getPosition() const 
    { 
     return position_; 
    } 

private: 
    Coordinates position_; 
}; 

Maintenant, vous pouvez le faire par exemple

Player player; 
int x = player.getPosition().x; 

Notez que vous ne devez pas renvoyer une référence, la fonction getPosition pourrait tout aussi bien avoir été définie comme

Coordinates getPosition() const { ... } 

Le « truc » est d'avoir une fonction renvoie la structure correcte. Cette structure peut bien sûr être une classe complète avec ses propres fonctions membres, ce qui signifie que vous pouvez facilement "chaîner" de nombreux appels de fonctions membres tant que vous renvoyez un objet quelconque.

1

Si vous voulez faire quelque chose comme ça, essayez d'utiliser des méthodes setters et getters, par ex. :

class Player 
{ 
private: 
    int m_X; 
    int m_Y; 

public: 
    int getX() const; 
    int getY() const; 
    void setX(int x); 
    void setY(int y); 
} 

méthodes getters devraient ressembler:

int Player::getX() 
{ 
    return m_X; 
} 

Et setters comme:

void Player::setX(int x) 
{ 
    m_X = x; 
} 

Ensuite, vous pouvez faire quelque chose eux de cette façon:

Player player; 
player.setX(5); 
player.setY(10); 
int playerXcoord = player.getX(); 
... 

Vous peut également gérer les deux coords en une seule méthode:L'avantage de cette approche est que tous vos composants de classe ne sont pas accessibles directement à l'extérieur de la classe. Cela empêche les modifications accidentelles.