TINF_Abgaben
Simbuerger_02_Vererbung.cpp@1:636c6bfc9174, 2020-03-31 (annotated)
- Committer:
- Ursukar
- Date:
- Tue Mar 31 08:35:15 2020 +0000
- Revision:
- 1:636c6bfc9174
Vererbung
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Ursukar | 1:636c6bfc9174 | 1 | #include <stdio.h> |
Ursukar | 1:636c6bfc9174 | 2 | #include <math.h> |
Ursukar | 1:636c6bfc9174 | 3 | |
Ursukar | 1:636c6bfc9174 | 4 | enum eckig { ja, nein }; |
Ursukar | 1:636c6bfc9174 | 5 | |
Ursukar | 1:636c6bfc9174 | 6 | // Basisklasse |
Ursukar | 1:636c6bfc9174 | 7 | class Form |
Ursukar | 1:636c6bfc9174 | 8 | { |
Ursukar | 1:636c6bfc9174 | 9 | |
Ursukar | 1:636c6bfc9174 | 10 | protected: |
Ursukar | 1:636c6bfc9174 | 11 | eckig m_hat_ecken; |
Ursukar | 1:636c6bfc9174 | 12 | float m_umfang; |
Ursukar | 1:636c6bfc9174 | 13 | float m_flaeche; |
Ursukar | 1:636c6bfc9174 | 14 | |
Ursukar | 1:636c6bfc9174 | 15 | public: |
Ursukar | 1:636c6bfc9174 | 16 | float leseUmfang() { return m_umfang; } |
Ursukar | 1:636c6bfc9174 | 17 | float leseFlaeche() { return m_flaeche; } |
Ursukar | 1:636c6bfc9174 | 18 | |
Ursukar | 1:636c6bfc9174 | 19 | Form(eckig hat_ecken); |
Ursukar | 1:636c6bfc9174 | 20 | }; |
Ursukar | 1:636c6bfc9174 | 21 | |
Ursukar | 1:636c6bfc9174 | 22 | Form::Form(eckig ecken) { |
Ursukar | 1:636c6bfc9174 | 23 | m_hat_ecken = ecken; |
Ursukar | 1:636c6bfc9174 | 24 | m_umfang = 0; |
Ursukar | 1:636c6bfc9174 | 25 | m_flaeche = 0; |
Ursukar | 1:636c6bfc9174 | 26 | }; |
Ursukar | 1:636c6bfc9174 | 27 | |
Ursukar | 1:636c6bfc9174 | 28 | // Abgeleite Klasse von Forms |
Ursukar | 1:636c6bfc9174 | 29 | class Kreis : public Form { |
Ursukar | 1:636c6bfc9174 | 30 | |
Ursukar | 1:636c6bfc9174 | 31 | public: |
Ursukar | 1:636c6bfc9174 | 32 | float leseUmfang() {return m_umfang;} // holt sich die Werte aus der Variable m_umfang |
Ursukar | 1:636c6bfc9174 | 33 | float leseFlaeche() {return m_flaeche;} |
Ursukar | 1:636c6bfc9174 | 34 | |
Ursukar | 1:636c6bfc9174 | 35 | Kreis(float radius); |
Ursukar | 1:636c6bfc9174 | 36 | }; |
Ursukar | 1:636c6bfc9174 | 37 | |
Ursukar | 1:636c6bfc9174 | 38 | // Berechnet Fläche und Umfang und speichert es in der Basisklasse |
Ursukar | 1:636c6bfc9174 | 39 | Kreis::Kreis(float radius) : Form(nein) { |
Ursukar | 1:636c6bfc9174 | 40 | |
Ursukar | 1:636c6bfc9174 | 41 | m_umfang = 2 * radius * M_PI; |
Ursukar | 1:636c6bfc9174 | 42 | m_flaeche = radius * radius * M_PI; |
Ursukar | 1:636c6bfc9174 | 43 | }; |
Ursukar | 1:636c6bfc9174 | 44 | |
Ursukar | 1:636c6bfc9174 | 45 | // Neue von Forms abgleitete Unterklasse |
Ursukar | 1:636c6bfc9174 | 46 | class Rechteck : public Form{ |
Ursukar | 1:636c6bfc9174 | 47 | protected: |
Ursukar | 1:636c6bfc9174 | 48 | |
Ursukar | 1:636c6bfc9174 | 49 | float m_kantenLaenge_a; |
Ursukar | 1:636c6bfc9174 | 50 | float m_kantenLaenge_b; |
Ursukar | 1:636c6bfc9174 | 51 | |
Ursukar | 1:636c6bfc9174 | 52 | public: |
Ursukar | 1:636c6bfc9174 | 53 | |
Ursukar | 1:636c6bfc9174 | 54 | float leseUmfang(); |
Ursukar | 1:636c6bfc9174 | 55 | float leseFlaeche(); |
Ursukar | 1:636c6bfc9174 | 56 | |
Ursukar | 1:636c6bfc9174 | 57 | Rechteck(float a, float b); |
Ursukar | 1:636c6bfc9174 | 58 | }; |
Ursukar | 1:636c6bfc9174 | 59 | |
Ursukar | 1:636c6bfc9174 | 60 | // Speichert die Paramter vom Objekt in die Member |
Ursukar | 1:636c6bfc9174 | 61 | Rechteck::Rechteck(float a, float b):Form(ja){ |
Ursukar | 1:636c6bfc9174 | 62 | m_kantenLaenge_a = a; |
Ursukar | 1:636c6bfc9174 | 63 | m_kantenLaenge_b = b; |
Ursukar | 1:636c6bfc9174 | 64 | }; |
Ursukar | 1:636c6bfc9174 | 65 | |
Ursukar | 1:636c6bfc9174 | 66 | // Holt sich die Werte aus den Membern und gibt den Wert auf die Methode zurück |
Ursukar | 1:636c6bfc9174 | 67 | float Rechteck::leseFlaeche(){ |
Ursukar | 1:636c6bfc9174 | 68 | return m_kantenLaenge_a * m_kantenLaenge_b; |
Ursukar | 1:636c6bfc9174 | 69 | |
Ursukar | 1:636c6bfc9174 | 70 | } |
Ursukar | 1:636c6bfc9174 | 71 | // Holt sich die Werte aus den Membern und gibt den Wert auf die Methode zurück |
Ursukar | 1:636c6bfc9174 | 72 | float Rechteck::leseUmfang(){ |
Ursukar | 1:636c6bfc9174 | 73 | return (m_kantenLaenge_a * 2) + (m_kantenLaenge_b * 2); |
Ursukar | 1:636c6bfc9174 | 74 | |
Ursukar | 1:636c6bfc9174 | 75 | } |
Ursukar | 1:636c6bfc9174 | 76 | |
Ursukar | 1:636c6bfc9174 | 77 | // Die abgleitete Klasse von Rechteck |
Ursukar | 1:636c6bfc9174 | 78 | class Quadrad : public Rechteck{ |
Ursukar | 1:636c6bfc9174 | 79 | |
Ursukar | 1:636c6bfc9174 | 80 | public: |
Ursukar | 1:636c6bfc9174 | 81 | |
Ursukar | 1:636c6bfc9174 | 82 | float leseUmfang(); |
Ursukar | 1:636c6bfc9174 | 83 | float leseFlaeche(); |
Ursukar | 1:636c6bfc9174 | 84 | |
Ursukar | 1:636c6bfc9174 | 85 | Quadrad(float a); |
Ursukar | 1:636c6bfc9174 | 86 | }; |
Ursukar | 1:636c6bfc9174 | 87 | |
Ursukar | 1:636c6bfc9174 | 88 | // Speichert die Paramter vom Objekt in die Member |
Ursukar | 1:636c6bfc9174 | 89 | Quadrad::Quadrad(float a) : Rechteck(a, a){ |
Ursukar | 1:636c6bfc9174 | 90 | m_kantenLaenge_a = a; |
Ursukar | 1:636c6bfc9174 | 91 | |
Ursukar | 1:636c6bfc9174 | 92 | }; |
Ursukar | 1:636c6bfc9174 | 93 | // Holt sich die Werte aus den Membern und gibt den Wert auf die Methode zurück |
Ursukar | 1:636c6bfc9174 | 94 | float Quadrad::leseUmfang(){ |
Ursukar | 1:636c6bfc9174 | 95 | return m_kantenLaenge_a * 4; |
Ursukar | 1:636c6bfc9174 | 96 | } |
Ursukar | 1:636c6bfc9174 | 97 | // Holt sich die Werte aus den Membern und gibt den Wert auf die Methode zurück |
Ursukar | 1:636c6bfc9174 | 98 | float Quadrad::leseFlaeche(){ |
Ursukar | 1:636c6bfc9174 | 99 | return m_kantenLaenge_a * m_kantenLaenge_a; |
Ursukar | 1:636c6bfc9174 | 100 | } |
Ursukar | 1:636c6bfc9174 | 101 | |
Ursukar | 1:636c6bfc9174 | 102 | int main() |
Ursukar | 1:636c6bfc9174 | 103 | { |
Ursukar | 1:636c6bfc9174 | 104 | // Hier werden neue Objekte erstellt |
Ursukar | 1:636c6bfc9174 | 105 | Kreis kr(1.0); |
Ursukar | 1:636c6bfc9174 | 106 | Rechteck re(2.0, 3.0); |
Ursukar | 1:636c6bfc9174 | 107 | Quadrad qu(5.0); |
Ursukar | 1:636c6bfc9174 | 108 | |
Ursukar | 1:636c6bfc9174 | 109 | // Hier greifen die Objekte auf die Methoden zu und werden mit Printf ausgegeben |
Ursukar | 1:636c6bfc9174 | 110 | printf("Alle Werte des Kreises: \n"); |
Ursukar | 1:636c6bfc9174 | 111 | printf("Der Umfang des Kreises beträgt: %f\n", kr.leseUmfang()); |
Ursukar | 1:636c6bfc9174 | 112 | printf("Die Fläche des Kreises beträgt: %f\n", kr.leseFlaeche()); |
Ursukar | 1:636c6bfc9174 | 113 | |
Ursukar | 1:636c6bfc9174 | 114 | printf("Alle Werte des Rechtecks: \n"); |
Ursukar | 1:636c6bfc9174 | 115 | printf("Der Umfang des Rechtecks beträgt: %f\n", re.leseUmfang()); |
Ursukar | 1:636c6bfc9174 | 116 | printf("Die Fläche des Rechtecks beträgt: %f\n", re.leseFlaeche()); |
Ursukar | 1:636c6bfc9174 | 117 | |
Ursukar | 1:636c6bfc9174 | 118 | printf("Alle Werte des Quadrads: \n"); |
Ursukar | 1:636c6bfc9174 | 119 | printf("Der Umfang des Quadrads beträgt: %f\n", qu.leseUmfang()); |
Ursukar | 1:636c6bfc9174 | 120 | printf("Die Fläche des Quadrads beträgt: %f\n", qu.leseFlaeche()); |
Ursukar | 1:636c6bfc9174 | 121 | |
Ursukar | 1:636c6bfc9174 | 122 | return 0; |
Ursukar | 1:636c6bfc9174 | 123 | } |