Abgabe_neu

Neubauer_2_Vererbung.cpp

Committer:
gigo2191
Date:
2020-04-28
Revision:
1:0415fa5d95e4
Parent:
0:5cabd77ebde3

File content as of revision 1:0415fa5d95e4:

/******************************************************************************

C++ Kurs BULME 19/20 SM
Aufgane 02
Vererbung
Mario Neubauer

*******************************************************************************/

#include <stdio.h>
#include <math.h>

enum eckig { ja = 0, nein = 1 }; 

//---------------------------------------------------
// Basisklasse 


class Form          
{                   
                    
  protected:     //Variablen, welche Vererbt werden können, jedoch nicht öffentlich zugänglich sind     
    eckig m_hat_ecken;
    float m_umfang;
    float m_flaeche;
 
  public:       //Variablen, welche öffentlich zugänglich sind
    float leseUmfang() { return m_umfang; }
    float leseFlaeche() { return m_flaeche; }
    Form(eckig hat_ecken);
};

Form::Form(eckig ecken) {   // im Konstruktor werden gem. Variablen initialisiert
    m_hat_ecken = ecken;
    m_umfang = 0;
    m_flaeche = 0;
};


//---------------------------------------------------------
//Klasse Kreis


class Kreis : public Form { // Hier wird eine von Form abgeleitete Klasse Kreis deklariert
    
  protected:                // Zugriffschutz protected bedeutet, dass abgeleitete 
    float m_radius;                        // Klassen ebenfalls zugreifen können.
    
  public:                   
    float leseUmfang(); //Für den Umfang
    float leseFlaeche(); //Für die Fläche
    int Ecken(); //Prüft, ob Ecken vorhanden sind
    Kreis(float radius); // Neuer Konstruktor erfordert nur den radius 
};

Kreis::Kreis(float radius) : Form(nein) {  
    
    m_umfang = 2 * radius * M_PI;  // Der Umfang wird berechnet
    m_flaeche = radius * radius * M_PI; //Die Fläche wird berechnet
};

float Kreis::leseUmfang() {return m_umfang; } //Der Wert vom Umfang wird zurückgegeben
float Kreis::leseFlaeche() { return m_flaeche;} //Der Wert von der Fläche wird zurückgegeben
int Kreis::Ecken() {return m_hat_ecken;} //Es wird zurückgegeben, ob Ecken vorhanden sind


//---------------------------------------------------------
// Klasse Rechteck


class Rechteck : public Form{  //Klasse Rechteck wird erzeugt und Klasse Form wird vererbt
    
  protected:
    float m_laenge; //Für die Länge
    float m_breite; //Für die Breite
    
  public:
    float leseUmfang(); //Für den Umfang
    float leseFlaeche(); //Für die Fläche
    int Ecken(); //Prüft, ob Ecken vorhanden sind
    Rechteck(float laenge, float breite); //Konstruktor, welcher länge und breite erfordert
};

Rechteck::Rechteck(float laenge, float breite) : Form(ja) {  //Die Membervariable wird initialisiert
    
    m_umfang = 2 * laenge + 2 * breite; //Der Umfang wird berechnet
    m_flaeche = laenge * breite; //Die Fläche wird berechnet
    
};

float Rechteck::leseUmfang() {return m_umfang;} //Der Wert vom Umfang wird zurückgegeben
float Rechteck::leseFlaeche(){return m_flaeche;} //Der Wert von der Fläche wird zurückgegeben
int Rechteck::Ecken() {return m_hat_ecken;} //Es wird zurückgegeben, ob Ecken vorhanden sind


//--------------------------------------------------------------------
//Klasse Quadrat


class Quadrat : public Rechteck{  //Klasse Quadrat wird erzeugt und Klasse Rechteck wird vererbt
    protected:
    float m_laenge;  //Nur eine Länge nötig
    
    public:
    Quadrat(float laenge); //Nur die Länge ist erforderlich
};    

Quadrat::Quadrat(float laenge) : Rechteck(m_laenge, m_breite) { 
    m_umfang = laenge * 4;  //Der Umfang wird berechnet
    m_flaeche = laenge * laenge;  //Die Fläche wird berechnet
};


//--------------------------------------------------------------      
      //Hauptprogramm
      
      
int main()
{
    //Klassen werden initialisiert
    Kreis kr(1.0);
    Rechteck rt(4.0, 2.0);
    Quadrat qu(4.0);
    
    //--------------------------------------------------------------------------
    
    //Werte werden übernommen
    //Kreis
    int ecke_Kreis = kr.Ecken();
    float um_Kreis = kr.leseUmfang();
    float fl_Kreis = kr.leseFlaeche();
    
    //Rechteck
    int ecke_Rechteck = rt.Ecken();
    float um_Rechteck = rt.leseUmfang();
    float fl_Rechteck = rt.leseFlaeche();
    
    //Quadrat
    int ecke_Quadrat = qu.Ecken();
    float um_Quadrat = qu.leseUmfang();
    float fl_Quadrat = qu.leseFlaeche();
    
    //--------------------------------------------------------------------------
    
    
    //Werte werden ausgegeben
    //Kreis
    printf("Die Werte des Kreises:\n"); 
    printf("Der Umfang des Kreises beträgt: %f\n", um_Kreis); //Umfang
    printf("Die Fläche des Kreises beträgt: %f\n", fl_Kreis); //Fläche
    
    //Ausgabe Ecken
    switch(ecke_Kreis) {
    case 0: printf("Der Kreis hat Ecken\n\n"); break;
    default: printf("Der Kreis hat keine Ecken\n\n"); break;
    }
    
    //--------------------------------------------------------------------------
    
    //Rechteck 
    printf("Die Werte des Rechtecks:\n");
    printf("Der Umfang des Rechtecks beträgt: %f\n", um_Rechteck);
    printf("Die Fläche des Rechtecks beträgt: %f\n", fl_Rechteck);
    
    //Ausgabe Ecken
    switch(ecke_Rechteck) {
    case 0: printf("Das Rechteck hat Ecken\n\n"); break;
    default: printf("Das Rechteck hat keine Ecken\n\n"); break;
    }
    
    //--------------------------------------------------------------------------
    
    //Quadrat
    printf("Die Werte des Quadrats:\n");
    printf("Der Umfang des Quadrats beträgt: %f\n", um_Quadrat);
    printf("Die Fläche des Quadrats beträgt: %f\n", fl_Quadrat);
    
    //Ausgabe Ecken
    switch(ecke_Quadrat) {
    case 0: printf("Das Quadrat hat Ecken\n\n"); break;
    default: printf("Das Quadrat hat keine Ecken\n\n"); break;
    }
    return 0;
}