Avatar billede thomas_fogh Nybegynder
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)
{ .... }
Avatar billede lars314 Nybegynder
22. maj 2006 - 10:42 #1
ColorType operator++(ColorType& c, int)
{
    // Gør hvad du skal her.

    return c;
}
Avatar billede lars314 Nybegynder
22. maj 2006 - 10:43 #2
Den første gav dig color++

Denne giver dig ++color

ColorType operator++(ColorType& c)
{
    // Gør hvad du skal her.

    return c;
}
Avatar billede thomas_fogh Nybegynder
22. maj 2006 - 14:52 #3
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
Avatar billede lars314 Nybegynder
22. maj 2006 - 14:57 #4
Ærgerligt. Det lader til din C++ compiler er lidt outdated.
Der er sikkert en vej uden om.
Avatar billede fiil123 Nybegynder
28. maj 2006 - 13:03 #5
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;
    }
Avatar billede fiil123 Nybegynder
28. maj 2006 - 14:16 #6
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;

}
Avatar billede thomas_fogh Nybegynder
04. august 2006 - 13:05 #7
Smid lige et svar, så jeg kan give nogle points.
Avatar billede fiil123 Nybegynder
04. august 2006 - 13:51 #8
Svar:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester