uebung2

Committer:
fatima365
Date:
Tue Mar 31 13:50:54 2020 +0000
Revision:
0:cf943a62afe4
uebung2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fatima365 0:cf943a62afe4 1 #include <stdio.h>
fatima365 0:cf943a62afe4 2 #include <math.h>
fatima365 0:cf943a62afe4 3
fatima365 0:cf943a62afe4 4 enum eckig { ja, nein };
fatima365 0:cf943a62afe4 5
fatima365 0:cf943a62afe4 6 class Form // Basisklasse
fatima365 0:cf943a62afe4 7 {
fatima365 0:cf943a62afe4 8 // In der Basisklasse werden alle gemeinsamen Variablen
fatima365 0:cf943a62afe4 9 protected:
fatima365 0:cf943a62afe4 10 eckig m_hat_ecken;
fatima365 0:cf943a62afe4 11 float m_umfang;
fatima365 0:cf943a62afe4 12 float m_flaeche;
fatima365 0:cf943a62afe4 13
fatima365 0:cf943a62afe4 14 public: // sowie auch alle gemeinsamen Methoden deklariert
fatima365 0:cf943a62afe4 15 float leseUmfang() { return m_umfang; }
fatima365 0:cf943a62afe4 16 float leseFlaeche() { return m_flaeche; }
fatima365 0:cf943a62afe4 17
fatima365 0:cf943a62afe4 18 Form(eckig hat_ecken);
fatima365 0:cf943a62afe4 19 };
fatima365 0:cf943a62afe4 20
fatima365 0:cf943a62afe4 21 Form::Form(eckig ecken) { // im Konstruktor werden gem. Variablen initialisiert
fatima365 0:cf943a62afe4 22 m_hat_ecken = ecken;
fatima365 0:cf943a62afe4 23 m_umfang = 0;
fatima365 0:cf943a62afe4 24 m_flaeche = 0;
fatima365 0:cf943a62afe4 25 };
fatima365 0:cf943a62afe4 26
fatima365 0:cf943a62afe4 27 class Kreis : public Form { // Hier wird eine von Form abgeleitete Klasse Kreis deklariert
fatima365 0:cf943a62afe4 28
fatima365 0:cf943a62afe4 29 protected: // Zugriffschutz protected bedeutet, dass abgeleitete
fatima365 0:cf943a62afe4 30 // Klassen ebenfalls zugreifen können.
fatima365 0:cf943a62afe4 31 float m_radius;
fatima365 0:cf943a62afe4 32
fatima365 0:cf943a62afe4 33 public:
fatima365 0:cf943a62afe4 34 float leseUmfang();
fatima365 0:cf943a62afe4 35 float leseFlaeche();
fatima365 0:cf943a62afe4 36
fatima365 0:cf943a62afe4 37 Kreis(float radius); // Neuer Konstruktor erfordert nur den radius
fatima365 0:cf943a62afe4 38 };
fatima365 0:cf943a62afe4 39
fatima365 0:cf943a62afe4 40
fatima365 0:cf943a62afe4 41 class Rechteck : public Form {
fatima365 0:cf943a62afe4 42
fatima365 0:cf943a62afe4 43 //Rechteck benötigt neue Membervariablen
fatima365 0:cf943a62afe4 44 protected:
fatima365 0:cf943a62afe4 45 float seite_a;
fatima365 0:cf943a62afe4 46 float seite_b;
fatima365 0:cf943a62afe4 47
fatima365 0:cf943a62afe4 48 public:
fatima365 0:cf943a62afe4 49 float leseUmfang();
fatima365 0:cf943a62afe4 50 float leseFlaeche();
fatima365 0:cf943a62afe4 51
fatima365 0:cf943a62afe4 52 Rechteck(float a, float b);
fatima365 0:cf943a62afe4 53 };
fatima365 0:cf943a62afe4 54
fatima365 0:cf943a62afe4 55 Rechteck::Rechteck(float a, float b) : Form(ja) {
fatima365 0:cf943a62afe4 56 seite_a = a;
fatima365 0:cf943a62afe4 57 seite_b = b;
fatima365 0:cf943a62afe4 58
fatima365 0:cf943a62afe4 59 //Umfang und Flaeche werden mit dem Protected Variablen
fatima365 0:cf943a62afe4 60 //der Unterklasse Rechteck ausgerechnet
fatima365 0:cf943a62afe4 61 m_umfang = (2*a) + (2*b);
fatima365 0:cf943a62afe4 62 m_flaeche = a*b;
fatima365 0:cf943a62afe4 63 };
fatima365 0:cf943a62afe4 64
fatima365 0:cf943a62afe4 65
fatima365 0:cf943a62afe4 66 Kreis::Kreis(float radius) : Form(nein) {
fatima365 0:cf943a62afe4 67 // Im Konstruktor werden gleich die Membervariablen initialisiert
fatima365 0:cf943a62afe4 68
fatima365 0:cf943a62afe4 69 // Über den radius werden Umfang und Fläche berechnet.
fatima365 0:cf943a62afe4 70 m_umfang = 2 * radius * M_PI; // Die Konstante M_PI ist in math.h definiert
fatima365 0:cf943a62afe4 71 m_flaeche = radius * radius * M_PI;
fatima365 0:cf943a62afe4 72 };
fatima365 0:cf943a62afe4 73
fatima365 0:cf943a62afe4 74 float Kreis::leseUmfang() {
fatima365 0:cf943a62afe4 75 // hier ist keine Änderung der Funktion nötig,
fatima365 0:cf943a62afe4 76 // daher wird die Funktion der Basisklasse aufger.
fatima365 0:cf943a62afe4 77 return m_umfang;
fatima365 0:cf943a62afe4 78 }
fatima365 0:cf943a62afe4 79
fatima365 0:cf943a62afe4 80 float Kreis::leseFlaeche(){
fatima365 0:cf943a62afe4 81 return m_flaeche;
fatima365 0:cf943a62afe4 82 }
fatima365 0:cf943a62afe4 83
fatima365 0:cf943a62afe4 84
fatima365 0:cf943a62afe4 85 float Rechteck::leseUmfang(){
fatima365 0:cf943a62afe4 86 return m_umfang;
fatima365 0:cf943a62afe4 87 }
fatima365 0:cf943a62afe4 88 float Rechteck::leseFlaeche(){
fatima365 0:cf943a62afe4 89 return m_flaeche;
fatima365 0:cf943a62afe4 90 }
fatima365 0:cf943a62afe4 91
fatima365 0:cf943a62afe4 92
fatima365 0:cf943a62afe4 93
fatima365 0:cf943a62afe4 94 int main()
fatima365 0:cf943a62afe4 95 {
fatima365 0:cf943a62afe4 96 printf("Wir arbeiten nun mit abgeleiteten Klassen!\n");
fatima365 0:cf943a62afe4 97 printf("Nun wird ein Objekt kr der Klasse Kreis erzeugt!\n");
fatima365 0:cf943a62afe4 98 Kreis kr(1.0);
fatima365 0:cf943a62afe4 99 Rechteck re(2.0, 3.0);
fatima365 0:cf943a62afe4 100
fatima365 0:cf943a62afe4 101 float um = kr.leseUmfang();
fatima365 0:cf943a62afe4 102
fatima365 0:cf943a62afe4 103 float umf = re.leseUmfang();
fatima365 0:cf943a62afe4 104
fatima365 0:cf943a62afe4 105
fatima365 0:cf943a62afe4 106 float fl = re.leseFlaeche();
fatima365 0:cf943a62afe4 107
fatima365 0:cf943a62afe4 108 printf("Der Umfang des Kreis beträgt: %f\n", um);
fatima365 0:cf943a62afe4 109 printf("Der Umfang des Rechtecks beträgt: %f\n", umf);
fatima365 0:cf943a62afe4 110 printf("Die Flaeche des Rechtecks beträgt: %f\n", fl);
fatima365 0:cf943a62afe4 111 return 0;
fatima365 0:cf943a62afe4 112 }