2017-03-25 1 views
0

Je suis en train de mettre en place un système similaire à l'objet de couleur assignation hexagonale, tels que:C++ - Surcharger « = » pour attribuer une valeur hexadécimale à un objet

Color color; 
color = 0xffff00; 

Si mon comprendre est correct, l'opérateur « = 'a été surchargé de sorte qu'il stocke réellement la valeur hexadécimale dans un type de données à l'intérieur de la couleur. Je ne comprends pas vraiment comment faire, mais voici ce que j'ai: (en présumant couleur stocke la couleur dans un typedef 3 octets appelé « data »)

Color operator=(const unsigned int& c) { 
    Color color; 
    color.data = c; 
    return color; 
} 

Est-ce que cela me donner ce que je besoin?

+0

La valeur n'est pas nécessairement hexadécimale. '0xffff00' est juste un littéral' int'. Vous pouvez également écrire 'color = 31;'. – Barmar

+0

Je suis conscient que l'hexagone est juste un nombre. C'est pourquoi dans mon exemple de surcharge, j'ai utilisé un int non signé – user6191359

+0

Alors quelle est la question alors? – Vallentin

Répondre

0

Vous devez surcharger l'opérateur d'affectation de la classe et probablement un constructeur aussi bien comme ceci:

class Color 
{ 
public: 
    Color(): data(0) {} 
    Color(unsigned i): data(i) {} // add an int constructor 

    // add assignment operator 
    Color& operator=(unsigned i) { data = i; return *this; } 

private: 
    unsigned data; 
}; 

Surcharger le constructeur vous permet de faire l'initialisation comme ceci:

Color c = 0x00FF00; 

La surcharge de l'opérateur d'affectation vous permet d'affecter après l'initialisation:

c = 0xFF00FF; 
0

Je pense qu'il serait préférable de l'implémenter en tant que fonction membre, afin de pouvoir modifier l'objet en place plutôt que d'en construire un nouveau et de le copier.

class Color { 
    ... 
    public: 
     void operator= (const unsigned int &c) { 
      data = c; 
     } 
    ... 
}