Rechteck-Implementierung
Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 46 von 61.
Aufgabe
EinfachSetzen wir den Aufbau des Shape Drawer-Projekts fort, indem wir Rectangle implementieren: eine weitere konkrete Form, die die Basisstruktur Shape einbettet, genau wie wir es bei Circle gemacht haben.
Aufbauend auf deinem bestehenden Projekt fügst du die Funktionalität für Rechtecke in den folgenden Dateien hinzu:
shape.h: Behalte deineShape-Schnittstelle mit den FunktionszeigertypenDrawFuncundAreaFuncaus den vorherigen Lektionen bei.circle.hundcircle.c: Behalte deine Circle-Implementierung aus der vorherigen Lektion bei.rectangle.h: Definiere deine StrukturRectanglehier. Ein Rechteck bettetShapeals sein erstes Element ein und fügt die Felderwidthundheighthinzu (beide vom Typdouble). Deklariere eine Konstruktorfunktioncreate_rectangle, die Parameter für Breite und Höhe entgegennimmt und einRectangleals Wert zurückgibt.rectangle.c: Implementiere das rechteckspezifische Verhalten:draw_rectangle: GibtDrawing Rectangle with width: X.XX and height: X.XXaus (beide Werte werden mit 2 Nachkommastellen angezeigt).area_rectangle: Gibt Breite × Höhe zurück.create_rectangle: Initialisiert einRectangle, verknüpft die Funktionszeiger des eingebettetenShapemit den Rechteckfunktionen, setzt die Abmessungen und gibt das Rechteck zurück.
main.c: Zeige, dass beide Formen über dieselbe Schnittstelle funktionieren. Lies zwei Eingaben ein: Breite und Höhe für ein Rechteck. Erstelle mithilfe deines Konstruktors ein Rechteck und rufe anschließend sowohldrawals auchareaüber die Funktionszeiger des eingebettetenShapeauf. Gib die Fläche mit 2 Nachkommastellen aus.
Dein Programm erhält zwei Eingaben: Werte für width und height (als Gleitkommazahlen).
Beispielausgabe, wenn die Eingaben 4.0 und 3.0 sind:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00Beispielausgabe, wenn die Eingaben 7.5 und 2.5 sind:
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75Genau wie bei Circle bettet Rectangle Shape als sein erstes Element ein, sodass du über das eingebettete Element auf die Funktionszeiger zugreifen kannst. Dieses einheitliche Muster ermöglicht Polymorphie: Beide Formen können einheitlich über ihre Shape-Schnittstelle behandelt werden. Denke daran, in allen Header-Dateien Include-Guards zu verwenden.
Probier es selbst
#include <stdio.h>
#include "shape.h"
#include "rectangle.h"
int main() {
double width, height;
scanf("%lf", &width);
scanf("%lf", &height);
// TODO: Erstelle ein Rechteck mit create_rectangle(width, height)
// TODO: Rufe draw über den Funktionszeiger der eingebetteten Shape auf
// TODO: Rufe area über den Funktionszeiger der eingebetteten Shape auf
// TODO: Gib die Fläche mit 2 Dezimalstellen aus: "Area: %.2f\n"
return 0;
}Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der modularen Programmierung
Header-DateienInclude GuardsQuelldateienStatische FunktionenWiederholung: Modularer Taschenrechner4Kapselung
Konzept der Opaque PointersOpaque Structs definierenGetter und SetterValidierung in SetternRückblick: Die geheime Box2Objekte und Methoden
Structs als ObjekteDer 'Self'-PointerConst-CorrectnessPointer vs. WertHilfsmethodenZusammenfassung: Point Manager5Projekt: Einfaches Bankkonto
Projekt-SetupImplementierung des Kontos3Objekt-Lebenszyklus
Konstruktor-MusterDestruktor-MusterStack-InitialisierungTiefe KopieRückblick: String-Wrapper6Vererbung durch Komposition
Struct-EinbettungDie First-Member-RegelZugriff auf Parent-MemberUpcastingRückblick: Formenhierarchie9Projekt: Formen-Zeichner
ProjektübersichtKreis-ImplementierungRechteck-ImplementierungPolymorphe VerwendungShape-ContainerÜbe selbstständig: Online-C-Compiler