22. maj 2006 - 08:53
Der er
7 kommentarer og 1 løsning
Overload operator++ for enum i en klasse
Hvordan kan jeg overloade ++ operatoren (prefix increment) for en enum i en klasse? class GraphicDefs { public: enum ColorType { C_FIRST_COLOR_TYPE = 0, C_BLACK = C_FIRST_COLOR_TYPE, C_BLUE = 1, C_GREEN = 2, C_CYAN = 3, C_RED = 4, C_MAGENTA = 5, C_BROWN = 6, C_MAX_NO_OF_COLOR = 20 }; enum LineType { L_SOLID = 0, L_DASHED }; } bliver brugt som: for (GraphicDefs::ColorType color=GraphicDefs::C_FIRST_COLOR_TYPE; color<GraphicDefs::C_MAX_NO_OF_COLOR; ++color) { .... }
Annonceindlæg fra Infor
ColorType operator++(ColorType& c, int) { // Gør hvad du skal her. return c; }
Den første gav dig color++ Denne giver dig ++color ColorType operator++(ColorType& c) { // Gør hvad du skal her. return c; }
Det virker desværre ikke... ColorType operator++(ColorType& c): GraphicDefs.h:52: postfix `GraphicDefs::operator++ (GraphicDefs::ColorType &)' must take `int' as its argument ColorType operator++(ColorType& c, int): GraphicDefs.h:61: `GraphicDefs::operator++ (GraphicDefs::ColorType &, int)' must take either zero or one argument
Ærgerligt. Det lader til din C++ compiler er lidt outdated. Der er sikkert en vej uden om.
Operator ++obj Prototype på ++obj KlasseNavn &operator++(); Implementation på ++obj KlasseNavn &KlasseNavn::operator++() { y++; x++; return *this; } Operator obj++ Prototype på obj++ KlasseNavn operator++(int); Implementation på obj++ KlasseNavn KlasseNavn::operator++(int) { KlasseNavn temp = *this; x++; y++; return temp; }
enum ColorType { C_FIRST_COLOR_TYPE = 0, C_BLACK = C_FIRST_COLOR_TYPE, C_BLUE = 1, C_GREEN = 2, C_CYAN = 3, C_RED = 4, C_MAGENTA = 5, C_BROWN = 6, C_MAX_NO_OF_COLOR = 20 }; ColorType& operator++(ColorType& s) { // Prefix s = ColorType(s + 1); return s; } ColorType operator++(ColorType& s, int) { // Postfix ColorType rtn = s; ++s; return rtn; } int main( ) { ColorType s(C_FIRST_COLOR_TYPE); cout << s << endl; ++s; // Calls operator++(s); cout << s << endl; s++; // Calls operator++(s, 0); cout << s << endl; }
04. august 2006 - 13:05
#7
Smid lige et svar, så jeg kan give nogle points.
04. august 2006 - 13:51
#8
Svar:)
Kurser inden for grundlæggende programmering