Avatar billede thomas_nj Nybegynder
19. marts 2005 - 20:01 Der er 8 kommentarer og
1 løsning

Operator overload uden for klassen

Hej eksperter
  Jeg står desværre og mangler ordet for det jeg vil, men jeg håber på at min forklaring gør det forståeligt.

  Hvis jeg har følgende klasse:
  class CoorClass
  {
  public:
      CoorClass(int aC) : C(aC)
      {
      }
      CoorClass & operator ++()
      {
        C++;
        return *this;
      }
     
      CoorClass & operator --()
      {
        C--;
        return *this;
      }
     
      bool operator == (const CoorClass &rhs)
      {
        return C == rhs.C;
      }
     
      void eks(void);
      int C;
  };

void CoorClass::eks(void)
{
  // kode   
}

og ønsker at få flyttet indmaden til funktionen CoorClass & operator --() uden for klassen. Ligesom jeg har gjort med funktionen void eks(void)

  Jeg har prøvet lidt forskellige gæt men alle resulterer i en fejl.
Avatar billede arne_v Ekspert
19. marts 2005 - 20:07 #1
Lige ud af landevejen:

bool CoorClass::operator==(const CoorClass &rhs)
Avatar billede thomas_nj Nybegynder
19. marts 2005 - 20:09 #2
Det er CoorClass & operator --() der driller mig. Bruger jeg: "CoorClass CoorClass:: & operator --()" giver det en fejl
Avatar billede arne_v Ekspert
19. marts 2005 - 20:10 #3
Det skal vel være:

CoorClass &CoorClass::operator--()
Avatar billede thomas_nj Nybegynder
19. marts 2005 - 20:11 #4
Ja det har du ret i. Mange tak for den hurtige hjælp, gider du smide et svar?
Avatar billede arne_v Ekspert
19. marts 2005 - 20:16 #5
.
Avatar billede thomas_nj Nybegynder
19. marts 2005 - 20:24 #6
Kan se det ikke var helt så simpelt som jeg troede. Hvis jeg nu vil hente den ud fra en klasse i en klasse:

class PointClass
{
public:
  PointClass(int aX, int aY) : X(aX), Y(aY)
  {}
  bool operator == (const PointClass &rhs)
  {
      return X == rhs.X && Y == rhs.Y;
  }
  bool operator != (const PointClass &rhs)
  {
      return !(operator == (rhs));
  }
  class CoorClass
  {
  public:
      CoorClass(int aC) : C(aC)
      {
      }
      CoorClass & operator ++();
     
      CoorClass & operator --()
      {
        C--;
        return *this;
      }
      bool operator == (const CoorClass &rhs)
      {
        return C == rhs.C;
      }
      int C;
  };
  CoorClass X;
  CoorClass Y;
};
Har prøvet med:

CoorClass &PointClass::CoorClass::operator ++()
{
        C++;
        return *this;
}

CoorClass PointClass::&CoorClass::operator ++()
{
        C++;
        return *this;
}
Avatar billede arne_v Ekspert
19. marts 2005 - 20:39 #7
Det nemmeste ville være at hive CoorClass ud af PointClass ...

:-)

Men jeg prøver lige at undersøge man ellers kan gøre ...
Avatar billede arne_v Ekspert
19. marts 2005 - 20:46 #8
Prøv:

PointClass::CoorClass &PointClass::CoorClass::operator ++()
Avatar billede thomas_nj Nybegynder
19. marts 2005 - 21:02 #9
Den var godt nok styg, men tror jeg har forstået den.
Returtypen CoorClass står jo inde i PointClass så derfor er det klart at den ikke bare kan hives ud foran.
Mange tak for den ekstra hjælp
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