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

class Vehikel
{
protected:
   int Raeder;
   double Gewicht;
public:
   void Initialisiere(int EinRaeder, double EinGewicht);
   int HoleRaeder(void)       {return Raeder;}
   double HoleGewicht(void)	{return Gewicht;}
   double Radlast(void)       {return Gewicht/Raeder;}
};



class Auto : public Vehikel
{
   int Passagieranzahl;
public:
   void Initialisiere(int EinRaeder, double EinGewicht, int Leute = 4);
   int Passagiere(void)       {return Passagieranzahl;}
};



class Laster : public Vehikel
{
   int Passagieranzahl;
   double Ladung;
public:
   void InitLaster(int WieViele = 2, double MaxLadung = 10000.0);
   double Effizienz(void);
   int Passagiere(void)       {return Passagieranzahl;}
};



int main()
{
Vehikel Hochrad;

   Hochrad.Initialisiere(1, 5.7);
   cout << "Das Hochrad hat " <<
					  Hochrad.HoleRaeder() << " Rad.\n";
   cout << "Die Radlast des Hochrades betraegt " <<
	   Hochrad.Radlast() << " kg auf dem einzigen Rad.\n";
   cout << "Das Hochrad wiegt " <<
				     Hochrad.HoleGewicht() << " kg.\n\n";

Auto Sedan[3];
int Index;

   for (Index = 0 ; Index < 3 ; Index++)
   {
	Sedan[Index].Initialisiere(4, 1600.0, 5);
	cout << "Der Sedan fuehrt " << Sedan[Index].Passagiere() <<
							" Passagiere mit sich.\n";
	cout << "Der Sedan wiegt " <<
				     Sedan[Index].HoleGewicht() << " kg.\n";
	cout << "Die Radlast des Sedan ist " <<
					Sedan[Index].Radlast() <<
								 " kg pro Rad.\n\n";
   }

Laster *Sattelschlepper;

   Sattelschlepper = new Laster;
   if (Sattelschlepper == NULL)
   {
	cout << "Speicherbeschaffung fehlgeschlagen\n";
	exit (EXIT_FAILURE);
   }
   Sattelschlepper->Initialisiere(18, 5700.0);
   Sattelschlepper->InitLaster(1, 15300.0);
   cout << "Der Sattelschlepper wiegt " << Sattelschlepper->HoleGewicht() << " kg.\n";
   cout << "Die Effizienz des Sattelschleppers ist " <<
			  100.0 * Sattelschlepper->Effizienz() << " Prozent.\n";
   delete Sattelschlepper;

   return 0;
}



		  // Initialisiere mit den Paramtern
void Vehikel::Initialisiere(int EinRaeder, double EinGewicht)
{
   Raeder = EinRaeder;
   Gewicht = EinGewicht;
}



void Auto::Initialisiere(int EinRaeder, double EinGewicht, int Leute)
{
   Passagieranzahl = Leute;
   Raeder = EinRaeder;
   Gewicht = EinGewicht;
}



void Laster::InitLaster(int WieViele, double MaxLadung)
{
   Passagieranzahl = WieViele;
   Ladung = MaxLadung;
}



double Laster::Effizienz(void)
{
   return Ladung / (Ladung + Gewicht);
}


// Ergebnis beim Ausführen
//
// Das Hochrad hat 1 Rad.
// Die Radlast des Hochrades betraegt 5.7 kg auf den einzigen Rad.
// Das Hochrad wiegt 5.7 kg.
//
// Der Sedan fuehrt 5 Passagiere mit sich.
// Der Sedan wiegt 1600 kg.
// Die Radlast des Sedan ist 400 kg pro Rad.
//
// Der Sedan fuehrt 5 Passagiere mit sich.
// Der Sedan wiegt 1600 kg.
// Die Radlast des Sedan ist 400 kg pro Rad.
//
// Der Sedan fuehrt 5 Passagiere mit sich.
// Der Sedan wiegt 1600 kg.
// Die Radlast des Sedan ist 400 kg pro Rad.
//
// Der Sattelschlepper wiegt 5700 kg.
// Die Effizienz des Sattelschleppers ist 72.8571 Prozent.
