Abgabe_neu

Revision:
0:5cabd77ebde3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Neubauer_2_Vererbung.cpp	Tue Apr 28 19:33:52 2020 +0000
@@ -0,0 +1,184 @@
+/******************************************************************************
+
+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;
+}