Rechteck-Implementierung
Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 46 von 61.
Aufgabe
EinfachLassen Sie uns das Shape Drawer-Projekt weiter ausbauen, indem wir das Rectangle implementieren — eine weitere konkrete Form, die das Basis-Shape-Struct einbettet, genau wie wir es beim Circle getan haben.
Aufbauend auf Ihrem bestehenden Projekt werden Sie die Rechteck-Funktionalität in diesen Dateien hinzufügen:
shape.h: Behalten Sie Ihr Basis-Shape-Interface mit den FunktionstypenDrawFuncundAreaFuncaus den vorherigen Lektionen bei.circle.hundcircle.c: Behalten Sie Ihre Circle-Implementierung aus der vorherigen Lektion bei.rectangle.h: Definieren Sie hier IhrRectangle-Struct. Ein Rechteck bettetShapeals sein erstes Mitglied ein und fügt die Felderwidthundheighthinzu (beidedouble). Deklarieren Sie eine Konstruktorfunktioncreate_rectangle, die Breite und Höhe als Parameter entgegennimmt und einRectangleals Wert zurückgibt.rectangle.c: Implementieren Sie das rechteckspezifische Verhalten:draw_rectangle— gibtDrawing Rectangle with width: X.XX and height: X.XXaus (beide Werte mit 2 Dezimalstellen angezeigt)area_rectangle— gibt Breite × Höhe zurückcreate_rectangle— initialisiert einRectangle, verknüpft die Funktionszeiger des eingebettetenShapemit den Rechteck-Funktionen, setzt die Dimensionen und gibt das Rechteck zurück
main.c: Demonstrieren Sie, dass beide Formen über dasselbe Interface funktionieren. Lesen Sie zwei Eingaben ein: Breite und Höhe für ein Rechteck. Erstellen Sie ein Rechteck mit Ihrem Konstruktor und rufen Sie dann sowohldrawals auchareaüber die Funktionszeiger des eingebettetenShapeauf. Geben Sie die Fläche mit 2 Dezimalstellen aus.
Ihr Programm erhält zwei Eingaben: width und height Werte (als Gleitkommazahlen).
Beispielhafte Ausgabe, wenn die Eingaben 4.0 und 3.0 sind:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00Beispielhafte Ausgabe, wenn die Eingaben 7.5 und 2.5 sind:
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75Genau wie beim Circle bettet das Rectangle Shape als sein erstes Mitglied ein, was Ihnen den Zugriff auf die Funktionszeiger über das eingebettete Mitglied ermöglicht. Dieses konsistente Muster ermöglicht Polymorphismus — beide Formen können einheitlich über ihr Shape-Interface behandelt werden. Denken Sie 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: Erstellen Sie ein Rechteck mit create_rectangle(width, height)
// TODO: Rufen Sie draw über den Funktionszeiger des eingebetteten Shape auf
// TODO: Rufen Sie area über den Funktionszeiger des eingebetteten Shape auf
// TODO: Geben Sie die Fläche mit 2 Dezimalstellen aus: "Area: %.2f\n"
return 0;
}Alle Lektionen in Object Oriented Programming
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-Implementierung