C++-manual
Förutgående | Kapitel 21. Överlagring av operatorer | Nästa

# Överlagring av operatorn `-`

Överlagring av den binära operatorn `-` är i princip en liknande operation som att överlagra `+` (se ovan). Enda skillnaden är hur de olika komponenterna kombineras. I detta fall subtraheras komponenterna från varandra.

Figur 21-2. Vektorsubtraktion

Vi kan definiera den överlagrade operatorn på följande sätt:

    // prototyp
    Vector operator- (const Vector & V) const;

    // implementation
    Vector Vector::operator- (const Vector & V) const {
      Vector Result;

      // sätt den nya vektorns värden
      Result.setX ( m_X - V.m_X );
      Result.setY ( m_Y - V.m_Y );
      Result.setZ ( m_Z - V.m_Z );

      // returnera den nya vektorn
      return Result;
    }

Vi kan nu skriva kod som t.ex. följande:

    Vector V1 ( 1, 2, 3 );
    Vector V2 ( 6, 5, 4 );

    // subtrahera vektorerna
    Vector Result = V1 - V2;

Båda operatorerna `+` och `-` kan förstås kombineras ihop i diverse uttryck. Dessa evalueras enligt normal precedensordning, d.v.s. från vänster till höger om inte parenteser används för att indikera annan ordning.

Funderar vi lite närmare på operatorn `-` märker vi snabbt att den inte enbart fungerar som en binär operator för subtraktion, utan kan även användas unärt, d.v.s. men endast en parameter. I detta fall är det frågan om en negation av ett värde, eller i vårt fall, en vektor. Vi kan överlagra även den unära versionen av `-` i klassen `Vector`:

    // prototyp
    Vector operator- () const;

    // implementation
    Vector Vector::operator- () const {
      Vector Result;

      // sätt den nya vektorns värden
      Result.setX ( -m_X );
      Result.setY ( -m_Y );
      Result.setZ ( -m_Z );

      // returnera den nya vektorn
      return Result;
    }

Metoden skapar en ny vektor som har ursprungsvektorns alla komponenter negerade. Vi får två metoder som heter `operator-`, men det är inget problem, eftersom de skiljer sig i vilka parametrar de accepterar, och kompilatorn vet således vilken metod som skall användas i olika situationer. Vi kan nu använda negationen i t.ex. följande kod:

    Vector V1 ( 1, 2, 3 );

    // negera vektorn
    Vector Result = -V1;

Förutgående | Hem | Nästa
Överlagring av operatorn `+` | Upp | Överlagring och friends