Crée un objet getPosition() surchager

Résolu
Bonjour,

je débute en c++ et je voudrait savoir comment avoir mon propre getPosition() et pouvoir lui
demander de retourne par exemple la position X, ex:"getPosition().x".

Pour l'instant j'utilise un objet spécial pour cette tache "getPositionX()" mais c'est pas très propre.

Mercie de m'avoir lue.

2 réponses

  1. Contributeur
    'lut, tu peux retourner une
    struct
    aussi ;)
    struct Coord {
        int x, y;
    };
    
    class Object {
    private:
        int x, y;
    
    public:
        Coord getPosition() const;
    };
    
    // et dans le .cpp
    
    Coord Objet::getPosition() const {
        // Si tu fais du C++11:
        return Coord { x, y };
        
        // Sinon, pour le C++ "normal":
        Coord c; c.x = x; c.y = y;
        return c;
    }
    Après niveau performance, quand c'est pas optimisé par le compilateur y'a une copie de la structure lors du renvoi. Sinon, les RVO (return value optimization) font disparaitre la perte de performance.
    from human import idiocy
    del idiocy
    0
    1. Merci.
      0
  2. Contributeur
    Bonjour,

    Au lieu de la structure, il vaudrait mieux faire une classe Coordonnees.

    Cdlt,
    0
    1. Contributeur
      Dans l'absolu ça ne change rien, une structure étant une classe sans membres privés, et sans constructeur ni opérateur de copie/déplacement dans le cas d'une struct POD.
      0
    2. Contributeur
      Comment ça une structure est une classe sans membres privés ? sans constructeur ?

      En C++, effectivement struct et class sont quasiment identiques. Mais par convention, on utilise struct en C++ comme on le fait en C (pas de fonctions membres, etc.), et pour le reste on utilise plutôt class.
      Après et comme souvent, chacun est libre de respecter les conventions...
      0
    3. Contributeur
      @fiddyrien n'interdit l'utilisation de membres privés
      Oui j'ai mal dit, en effet je pensait à la visibilité publique par défaut.

      Non plus...
      J'ai précisé que c'est dans le cas où il s'agit d'une struct POD...

      Quant à l'utilisation, effectivement chacun ses gouts et son utilisation. Toutefois les fonctions membres sont ici des méthodes, qui donc n'ont pas d'incidence sur la structure elle-même, à l'instar d'un pointeur de fonction qu'on mettrait en C; où dans les deux cas on est obligé de passer un pointeur vers "l'objet" concerné (
      this
      en C++, dont le passage en argument est automatique (après ça dépend des conventions d'appel et de mangling), et une variable manuelle en C
      thiz
      ,
      self
      , ou autre)
      0