					// Kapitel 6 - Programm 8 - OPUEBER.CPP
#include <iostream.h>

class Box
{
   int Laenge;
   int Breite;
public:
   void Setze(int L, int B) {Laenge = L; Breite = B;}
   int HoleFlaeche(void) {return Laenge * Breite;}
   friend Box operator+(Box A, Box B);  // Addiere zwei Boxen
   friend Box operator+(int A, Box B);  // Addiere eine Konstante zu einer Box
   friend Box operator*(int A, Box B);  // Multipliziere eine Box mit einer Konstanten
};

Box operator+(Box A, Box B)	// Addiere die Breite von zwei Boxen
{
Box Temp;
   Temp.Laenge = A.Laenge;
   Temp.Breite = A.Breite + B.Breite;
   return Temp;
}

Box operator+(int A, Box B)	// Addiere eine Konstante zur Breite einer Box
{
Box Temp;
   Temp.Laenge = B.Laenge;
   Temp.Breite = A + B.Breite;
   return Temp;
}

Box operator*(int A, Box B)	// Multipliziere eine Box mit einer Konstanten
{
Box Temp;
   Temp.Laenge = A * B.Laenge;
   Temp.Breite = A * B.Breite;
   return Temp;
}

int main()
{
Box Klein, Mittel, Grosz;
Box Temp;

   Klein.Setze(2, 4);
   Mittel.Setze(5, 6);
   Grosz.Setze(8, 10);

   cout << "Der Flaecheninhalt ist " << Klein.HoleFlaeche() << "\n";
   cout << "Der Flaecheninhalt ist " << Mittel.HoleFlaeche() << "\n";
   cout << "Der Flaecheninhalt ist " << Grosz.HoleFlaeche() << "\n";

   Temp = Klein + Mittel; 
   cout << "Der neue Flaecheninhalt ist " << Temp.HoleFlaeche() << "\n";
   Temp = 10 + Klein;
   cout << "Der neue Flaecheninhalt ist " << Temp.HoleFlaeche() << "\n";
   Temp = 4 * Grosz;
   cout << "Der neue Flaecheninhalt ist " << Temp.HoleFlaeche() << "\n";

   return 0;
}


// Ergebnis beim Ausführen
//
// Der Flaecheninhalt ist 8
// Der Flaecheninhalt ist 30
// Der Flaecheninhalt ist 80
// Der neue Flaecheninhalt ist 20
// Der neue Flaecheninhalt ist 28
// Der neue Flaecheninhalt ist 1280


