3 votes

Peut-on "surcharger un cast" en C++ OOP ?

L'interface WinAPI dispose d'une fonction POINT mais j'essaie de créer une classe alternative à celle-ci afin que vous puissiez définir les valeurs de la structure x y y à partir d'un constructeur. Il est difficile d'expliquer cela en une phrase.

/**
 * X-Y coordinates
 */
class Point {
  public:
    int X, Y;

    Point(void)            : X(0),    Y(0)    {}
    Point(int x, int y)    : X(x),    Y(y)    {}
    Point(const POINT& pt) : X(pt.x), Y(pt.y) {}

    Point& operator= (const POINT& other) {
        X = other.x;
        Y = other.y;
    }
};

// I have an assignment operator and copy constructor.
Point myPtA(3,7);
Point myPtB(8,5);

POINT pt;
pt.x = 9;
pt.y = 2;

// I can assign a 'POINT' to a 'Point'
myPtA = pt;

// But I also want to be able to assign a 'Point' to a 'POINT'
pt = myPtB;

Est-il possible de surcharger operator= de manière à ce que je puisse assigner un Point à un POINT ? Ou peut-être une autre méthode pour y parvenir ?

4voto

juanchopanza Points 115680

Vous pouvez ajouter un opérateur cast à votre Point classe :

class Point {
  // as before
  ....
  operator POINT () const { 
    // build a POINT from this and return it
    POINT p = {X,Y};
    return p;
  }
}

4voto

Mankarse Points 22800

C'est le rôle d'un opérateur de conversion de type :

class Point {
  public:
    int X, Y;

    //...

    operator POINT() const {
        POINT pt;
        pt.x = X;
        pt.y = Y;
        return pt;
    }
};

0voto

Denis Ermolin Points 4015

Utiliser l'opérateur de conversion :

class Point 
{
public:
   operator POINT()const
   {
       Point p;
       //copy data to p
       return p;
   }
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X