Zeichen ials Dezimal oder Hex ausgeben
Dependencies: mbed
Xiaojingmao_2_Vererbung.cpp@2:b57deaf107b8, 2020-04-29 (annotated)
- Committer:
- jesephin
- Date:
- Wed Apr 29 16:44:06 2020 +0000
- Revision:
- 2:b57deaf107b8
Xiaojingmao_2_Vererbung publishen wird
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jesephin | 2:b57deaf107b8 | 1 | /* Ihre Aufgaben! |
jesephin | 2:b57deaf107b8 | 2 | 1. ErgC$nzen Sie die Klasse Kreis um die Methode float leseFlaeche(); |
jesephin | 2:b57deaf107b8 | 3 | |
jesephin | 2:b57deaf107b8 | 4 | 2. Leiten Sie von der Basisklasse Form die Klasse Rechteck ab |
jesephin | 2:b57deaf107b8 | 5 | Ueberlegen Sie sich welche Parameter der Konstruktur fC<r die Klasse |
jesephin | 2:b57deaf107b8 | 6 | Rechteck benC6tigt. Implementieren sie neben dem Konstruktor auch alle |
jesephin | 2:b57deaf107b8 | 7 | Methoden der Basisklasse, sodass korrekte Werte berechnet werden. |
jesephin | 2:b57deaf107b8 | 8 | |
jesephin | 2:b57deaf107b8 | 9 | 3. Optional: Leiten Sie von der Klasse Rechteck die Klasse Quadrat ab. |
jesephin | 2:b57deaf107b8 | 10 | Implementieren Sie Konstruktor und alle Methoden in der Form, dass |
jesephin | 2:b57deaf107b8 | 11 | die Implementierungen der Klasse Rechteck genutzt werden. |
jesephin | 2:b57deaf107b8 | 12 | Quadrat soll eine Subklasse von Rechteck sein. |
jesephin | 2:b57deaf107b8 | 13 | |
jesephin | 2:b57deaf107b8 | 14 | Format der Dateinamen: <Nachname>_<Übungsnummer>_<Titel> |
jesephin | 2:b57deaf107b8 | 15 | Bsp: Brunnhofer_2_Vererbung |
jesephin | 2:b57deaf107b8 | 16 | |
jesephin | 2:b57deaf107b8 | 17 | Hinweis: Der Quellcode der Programme sollte auch kommentiert werden! |
jesephin | 2:b57deaf107b8 | 18 | |
jesephin | 2:b57deaf107b8 | 19 | */ |
jesephin | 2:b57deaf107b8 | 20 | |
jesephin | 2:b57deaf107b8 | 21 | #include <stdio.h> |
jesephin | 2:b57deaf107b8 | 22 | #include <math.h> |
jesephin | 2:b57deaf107b8 | 23 | |
jesephin | 2:b57deaf107b8 | 24 | enum eckig { ja, nein }; |
jesephin | 2:b57deaf107b8 | 25 | |
jesephin | 2:b57deaf107b8 | 26 | class Form // Basisklasse |
jesephin | 2:b57deaf107b8 | 27 | { |
jesephin | 2:b57deaf107b8 | 28 | // In der Basisklasse werden alle gemeinsamen Variablen |
jesephin | 2:b57deaf107b8 | 29 | protected: |
jesephin | 2:b57deaf107b8 | 30 | eckig m_hat_ecken; |
jesephin | 2:b57deaf107b8 | 31 | float m_umfang; |
jesephin | 2:b57deaf107b8 | 32 | float m_flaeche; |
jesephin | 2:b57deaf107b8 | 33 | float m_diagonale; |
jesephin | 2:b57deaf107b8 | 34 | float m_rechteckumfang; |
jesephin | 2:b57deaf107b8 | 35 | float m_rechteckflaeche; |
jesephin | 2:b57deaf107b8 | 36 | float m_quadratumfang; |
jesephin | 2:b57deaf107b8 | 37 | float m_quadratflaeche; |
jesephin | 2:b57deaf107b8 | 38 | |
jesephin | 2:b57deaf107b8 | 39 | |
jesephin | 2:b57deaf107b8 | 40 | public: // sowie auch alle gemeinsamen Methoden deklariert |
jesephin | 2:b57deaf107b8 | 41 | float leseUmfang () {return m_umfang; } |
jesephin | 2:b57deaf107b8 | 42 | float leseFlaeche () {return m_flaeche; } |
jesephin | 2:b57deaf107b8 | 43 | float leseRechteckUmfang () {return m_rechteckumfang;} |
jesephin | 2:b57deaf107b8 | 44 | float leseRechteckFlaeche () {return m_rechteckflaeche;} |
jesephin | 2:b57deaf107b8 | 45 | float leseDiagonale () {return m_diagonale;} |
jesephin | 2:b57deaf107b8 | 46 | float leseQuadratUmfang () {return m_quadratumfang;} |
jesephin | 2:b57deaf107b8 | 47 | float leseQuadratFlaeche () {return m_quadratflaeche;} |
jesephin | 2:b57deaf107b8 | 48 | |
jesephin | 2:b57deaf107b8 | 49 | Form (eckig hat_ecken); |
jesephin | 2:b57deaf107b8 | 50 | |
jesephin | 2:b57deaf107b8 | 51 | }; |
jesephin | 2:b57deaf107b8 | 52 | |
jesephin | 2:b57deaf107b8 | 53 | Form::Form (eckig ecken) |
jesephin | 2:b57deaf107b8 | 54 | { // im Konstruktor werden gem. Variablen initialisiert |
jesephin | 2:b57deaf107b8 | 55 | m_hat_ecken = ecken; |
jesephin | 2:b57deaf107b8 | 56 | m_umfang = 0; |
jesephin | 2:b57deaf107b8 | 57 | m_flaeche = 0; |
jesephin | 2:b57deaf107b8 | 58 | }; |
jesephin | 2:b57deaf107b8 | 59 | |
jesephin | 2:b57deaf107b8 | 60 | class Kreis:public Form |
jesephin | 2:b57deaf107b8 | 61 | { // Hier wird eine von Form abgeleitete Klasse Kreis deklariert |
jesephin | 2:b57deaf107b8 | 62 | |
jesephin | 2:b57deaf107b8 | 63 | protected: // Zugriffschutz protected bedeutet, dass abgeleitete |
jesephin | 2:b57deaf107b8 | 64 | // Klassen ebenfalls zugreifen koennen. |
jesephin | 2:b57deaf107b8 | 65 | float m_radius; |
jesephin | 2:b57deaf107b8 | 66 | |
jesephin | 2:b57deaf107b8 | 67 | public: |
jesephin | 2:b57deaf107b8 | 68 | float leseUmfang (); |
jesephin | 2:b57deaf107b8 | 69 | float leseFlaeche (); |
jesephin | 2:b57deaf107b8 | 70 | |
jesephin | 2:b57deaf107b8 | 71 | Kreis (float radius); // Neuer Konstruktor erfordert nur den radius |
jesephin | 2:b57deaf107b8 | 72 | }; |
jesephin | 2:b57deaf107b8 | 73 | |
jesephin | 2:b57deaf107b8 | 74 | Kreis::Kreis (float radius): Form (nein) |
jesephin | 2:b57deaf107b8 | 75 | { |
jesephin | 2:b57deaf107b8 | 76 | // Im Konstruktor werden gleich die Membervariablen initialisiert |
jesephin | 2:b57deaf107b8 | 77 | |
jesephin | 2:b57deaf107b8 | 78 | // Ueber den radius werden Umfang und Fläeche berechnet. |
jesephin | 2:b57deaf107b8 | 79 | m_umfang = 2 * radius * M_PI; // Die Konstante M_PI ist in math.h definiert |
jesephin | 2:b57deaf107b8 | 80 | m_flaeche = radius * radius * M_PI; |
jesephin | 2:b57deaf107b8 | 81 | }; |
jesephin | 2:b57deaf107b8 | 82 | |
jesephin | 2:b57deaf107b8 | 83 | float Kreis::leseUmfang () |
jesephin | 2:b57deaf107b8 | 84 | { |
jesephin | 2:b57deaf107b8 | 85 | // hier ist keine Aenderung der Funktion noetig, |
jesephin | 2:b57deaf107b8 | 86 | // daher wird die Funktion der Basisklasse aufger. |
jesephin | 2:b57deaf107b8 | 87 | return m_umfang; |
jesephin | 2:b57deaf107b8 | 88 | }; |
jesephin | 2:b57deaf107b8 | 89 | |
jesephin | 2:b57deaf107b8 | 90 | float Kreis::leseFlaeche () |
jesephin | 2:b57deaf107b8 | 91 | { |
jesephin | 2:b57deaf107b8 | 92 | return m_flaeche; |
jesephin | 2:b57deaf107b8 | 93 | }; |
jesephin | 2:b57deaf107b8 | 94 | |
jesephin | 2:b57deaf107b8 | 95 | |
jesephin | 2:b57deaf107b8 | 96 | class Rechteck:public Form |
jesephin | 2:b57deaf107b8 | 97 | { // Hier wird eine von Form abgeleitete Klasse Rechteck deklariert |
jesephin | 2:b57deaf107b8 | 98 | |
jesephin | 2:b57deaf107b8 | 99 | protected: // Zugriffschutz protected bedeutet, dass abgeleitete |
jesephin | 2:b57deaf107b8 | 100 | // Klassen ebenfalls zugreifen koennen. |
jesephin | 2:b57deaf107b8 | 101 | float m_laenge; |
jesephin | 2:b57deaf107b8 | 102 | float m_breit; |
jesephin | 2:b57deaf107b8 | 103 | float m_diagonale; |
jesephin | 2:b57deaf107b8 | 104 | |
jesephin | 2:b57deaf107b8 | 105 | public: |
jesephin | 2:b57deaf107b8 | 106 | float leseRechteckFlaeche (); |
jesephin | 2:b57deaf107b8 | 107 | float leseRechteckUmfang (); |
jesephin | 2:b57deaf107b8 | 108 | float leseDiagonale (); |
jesephin | 2:b57deaf107b8 | 109 | |
jesephin | 2:b57deaf107b8 | 110 | Rechteck (float laenge,float breit); // Neuer Konstruktor erfordert nur den radius |
jesephin | 2:b57deaf107b8 | 111 | |
jesephin | 2:b57deaf107b8 | 112 | }; |
jesephin | 2:b57deaf107b8 | 113 | |
jesephin | 2:b57deaf107b8 | 114 | Rechteck::Rechteck (float laenge,float breit):Form (ja) |
jesephin | 2:b57deaf107b8 | 115 | { |
jesephin | 2:b57deaf107b8 | 116 | // Im Konstruktor werden gleich die Membervariablen initialisiert |
jesephin | 2:b57deaf107b8 | 117 | |
jesephin | 2:b57deaf107b8 | 118 | // Ueber den Seiten werden Umfang und Flaeche berechnet. |
jesephin | 2:b57deaf107b8 | 119 | m_rechteckumfang = 2 * (laenge + breit); |
jesephin | 2:b57deaf107b8 | 120 | m_rechteckflaeche = laenge * breit; |
jesephin | 2:b57deaf107b8 | 121 | m_diagonale=sqrt(pow(laenge,2)+ pow(breit,2)); |
jesephin | 2:b57deaf107b8 | 122 | }; |
jesephin | 2:b57deaf107b8 | 123 | |
jesephin | 2:b57deaf107b8 | 124 | float Rechteck::leseRechteckUmfang () |
jesephin | 2:b57deaf107b8 | 125 | { |
jesephin | 2:b57deaf107b8 | 126 | // hier ist keine Aenderung der Funktion noetig, |
jesephin | 2:b57deaf107b8 | 127 | // daher wird die Funktion der Basisklasse aufger. |
jesephin | 2:b57deaf107b8 | 128 | return m_rechteckumfang; |
jesephin | 2:b57deaf107b8 | 129 | }; |
jesephin | 2:b57deaf107b8 | 130 | |
jesephin | 2:b57deaf107b8 | 131 | float Rechteck::leseRechteckFlaeche () |
jesephin | 2:b57deaf107b8 | 132 | { |
jesephin | 2:b57deaf107b8 | 133 | return m_rechteckflaeche; |
jesephin | 2:b57deaf107b8 | 134 | }; |
jesephin | 2:b57deaf107b8 | 135 | |
jesephin | 2:b57deaf107b8 | 136 | float Rechteck::leseDiagonale () |
jesephin | 2:b57deaf107b8 | 137 | { |
jesephin | 2:b57deaf107b8 | 138 | return m_diagonale; |
jesephin | 2:b57deaf107b8 | 139 | }; |
jesephin | 2:b57deaf107b8 | 140 | |
jesephin | 2:b57deaf107b8 | 141 | class Quadrat : public Rechteck{ |
jesephin | 2:b57deaf107b8 | 142 | protected: |
jesephin | 2:b57deaf107b8 | 143 | float m_laenge; |
jesephin | 2:b57deaf107b8 | 144 | //float m_breit; |
jesephin | 2:b57deaf107b8 | 145 | float m_diagonale; |
jesephin | 2:b57deaf107b8 | 146 | |
jesephin | 2:b57deaf107b8 | 147 | //alle Variablen kann man von public Rechteck benutzen |
jesephin | 2:b57deaf107b8 | 148 | |
jesephin | 2:b57deaf107b8 | 149 | /*Flächeninhalt = Seitenlänge * Seitenlänge |
jesephin | 2:b57deaf107b8 | 150 | Umfang = Seite * 4 |
jesephin | 2:b57deaf107b8 | 151 | Diagonale = Wurzel aus Seite² + Seite²*/ |
jesephin | 2:b57deaf107b8 | 152 | |
jesephin | 2:b57deaf107b8 | 153 | public: |
jesephin | 2:b57deaf107b8 | 154 | float leseQuadratFlaeche (); |
jesephin | 2:b57deaf107b8 | 155 | float leseQuadratUmfang (); |
jesephin | 2:b57deaf107b8 | 156 | float leseDiagonale (); |
jesephin | 2:b57deaf107b8 | 157 | |
jesephin | 2:b57deaf107b8 | 158 | Quadrat(float laenge); |
jesephin | 2:b57deaf107b8 | 159 | }; |
jesephin | 2:b57deaf107b8 | 160 | |
jesephin | 2:b57deaf107b8 | 161 | Quadrat::Quadrat (float laenge):Rechteck (laenge,laenge) //ohne datentyp bei rechteck |
jesephin | 2:b57deaf107b8 | 162 | |
jesephin | 2:b57deaf107b8 | 163 | { |
jesephin | 2:b57deaf107b8 | 164 | // Im Konstruktor werden gleich die Membervariablen initialisiert |
jesephin | 2:b57deaf107b8 | 165 | |
jesephin | 2:b57deaf107b8 | 166 | // Ueber den Seiten werden Umfang und Flaeche berechnet. |
jesephin | 2:b57deaf107b8 | 167 | m_quadratumfang = 4 * laenge ; |
jesephin | 2:b57deaf107b8 | 168 | m_quadratflaeche = laenge * laenge; |
jesephin | 2:b57deaf107b8 | 169 | m_diagonale=sqrt(pow(laenge,2)+ pow(laenge,2)); |
jesephin | 2:b57deaf107b8 | 170 | }; |
jesephin | 2:b57deaf107b8 | 171 | |
jesephin | 2:b57deaf107b8 | 172 | float Quadrat::leseQuadratUmfang () |
jesephin | 2:b57deaf107b8 | 173 | { |
jesephin | 2:b57deaf107b8 | 174 | // hier ist keine Aenderung der Funktion noetig, |
jesephin | 2:b57deaf107b8 | 175 | // daher wird die Funktion der Basisklasse aufger. |
jesephin | 2:b57deaf107b8 | 176 | return m_quadratumfang; |
jesephin | 2:b57deaf107b8 | 177 | }; |
jesephin | 2:b57deaf107b8 | 178 | |
jesephin | 2:b57deaf107b8 | 179 | float Quadrat::leseQuadratFlaeche () |
jesephin | 2:b57deaf107b8 | 180 | { |
jesephin | 2:b57deaf107b8 | 181 | return m_quadratflaeche; |
jesephin | 2:b57deaf107b8 | 182 | }; |
jesephin | 2:b57deaf107b8 | 183 | |
jesephin | 2:b57deaf107b8 | 184 | float Quadrat::leseDiagonale () |
jesephin | 2:b57deaf107b8 | 185 | { |
jesephin | 2:b57deaf107b8 | 186 | return m_diagonale; |
jesephin | 2:b57deaf107b8 | 187 | }; |
jesephin | 2:b57deaf107b8 | 188 | |
jesephin | 2:b57deaf107b8 | 189 | int main () |
jesephin | 2:b57deaf107b8 | 190 | { |
jesephin | 2:b57deaf107b8 | 191 | Kreis kr(1.0); // Hier wird der Konstruktor aufgerufen und das |
jesephin | 2:b57deaf107b8 | 192 | // damit das Objekt meineForm der Klasse Kreis |
jesephin | 2:b57deaf107b8 | 193 | // mit dem radius 1.0 erstellt. auch instanziert. |
jesephin | 2:b57deaf107b8 | 194 | float um = kr.leseUmfang(); // Methode wird aufgerufen von Kreis Methode |
jesephin | 2:b57deaf107b8 | 195 | float fl = kr.leseFlaeche(); |
jesephin | 2:b57deaf107b8 | 196 | |
jesephin | 2:b57deaf107b8 | 197 | Rechteck re(3,5); |
jesephin | 2:b57deaf107b8 | 198 | float um_r = re.leseRechteckUmfang(); // Methode wird aufgerufen von Rechteck Methode |
jesephin | 2:b57deaf107b8 | 199 | float fl_r = re.leseRechteckFlaeche(); |
jesephin | 2:b57deaf107b8 | 200 | float di_r = re.leseDiagonale(); |
jesephin | 2:b57deaf107b8 | 201 | |
jesephin | 2:b57deaf107b8 | 202 | Quadrat qu(4.0); |
jesephin | 2:b57deaf107b8 | 203 | float um_q = qu.leseQuadratUmfang(); // Methode wird aufgerufen von Quadrat Methode |
jesephin | 2:b57deaf107b8 | 204 | float fl_q = qu.leseQuadratFlaeche(); |
jesephin | 2:b57deaf107b8 | 205 | float di_q = qu.leseDiagonale(); |
jesephin | 2:b57deaf107b8 | 206 | |
jesephin | 2:b57deaf107b8 | 207 | printf ("Der Kreis Umfang betraeggt: %f.\n", um); |
jesephin | 2:b57deaf107b8 | 208 | printf ("Der Kreis Fläche betraeggt: %f.\n", fl); |
jesephin | 2:b57deaf107b8 | 209 | printf ("Der Rechteck Umfang betraeggt: %f.\n", um_r); |
jesephin | 2:b57deaf107b8 | 210 | printf ("Der Rechteck Fläche betraeggt: %f.\n", fl_r); |
jesephin | 2:b57deaf107b8 | 211 | printf ("Der Rechteck Diagonale betraeggt: %f.\n", di_r); |
jesephin | 2:b57deaf107b8 | 212 | printf ("Der Quadrat Umfang betraeggt: %f.\n", um_q); |
jesephin | 2:b57deaf107b8 | 213 | printf ("Der Quadrat Fläche betraeggt: %f.\n", fl_q); |
jesephin | 2:b57deaf107b8 | 214 | printf ("Der Quadrat Diagonale betraeggt: %f.\n", di_q); |
jesephin | 2:b57deaf107b8 | 215 | |
jesephin | 2:b57deaf107b8 | 216 | return 0; |
jesephin | 2:b57deaf107b8 | 217 | } |