Kreis-Implementierung
Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 45 von 61.
Aufgabe
EinfachFahren wir mit der Entwicklung des Projekts „Shape Drawer“ fort, indem wir Circle implementieren: eine konkrete Form, die die grundlegende Shape-Struktur einbettet und ihre eigene Zeichen- und Flächenlogik bereitstellt.
Aufbauend auf dem Fundament aus der vorherigen Lektion erweiterst du dein Projekt um diese Dateien:
shape.h: Behalte hier deine grundlegendeShape-Schnittstelle aus der vorherigen Lektion mit den FunktionszeigertypenDrawFuncundAreaFuncbei.circle.h: Definiere hier deineCircle-Struktur. Ein Kreis bettetShapeals sein erstes Element ein (wodurch die Regel für das Hochstufen des ersten Elements ermöglicht wird) und fügt ein Feldradiusvom Typdoublehinzu. Deklariere eine Konstruktorfunktioncreate_circle, die einen Radius entgegennimmt und einenCircleals Wert zurückgibt.circle.c: Implementiere hier das kreisspezifische Verhalten:draw_circle: gibtDrawing Circle with radius: X.XXaus (der Radius wird mit 2 Dezimalstellen angezeigt)area_circle: gibt π × Radius² zurück (verwende3.14159für π)create_circle: initialisiert einenCircle, verknüpft die Funktionszeiger des eingebettetenShapemitdraw_circleundarea_circle, setzt den Radius und gibt den Kreis zurück
main.c: Führe alles zusammen. Lies einen Radiuswert als Eingabe ein, erstelle mithilfe deines Konstruktors einen Kreis und rufe anschließend sowohldrawals auchareaüber die Funktionszeiger des eingebettetenShapeauf. Gib die Fläche mit 2 Dezimalstellen aus.
Dein Programm erhält eine Eingabe: einen Radius (als Gleitkommazahl).
Beispielausgabe bei der Eingabe 5.0:
Drawing Circle with radius: 5.00
Area: 78.54Beispielausgabe bei der Eingabe 3.5:
Drawing Circle with radius: 3.50
Area: 38.48Die zentrale Erkenntnis ist, dass Circle ein Shape als erstes Element enthält. Dadurch kannst du über circle.base.draw und circle.base.area auf die Funktionszeiger zugreifen (oder über die Bezeichnungen, die du für das eingebettete Element verwendest). Übergebe beim Aufrufen dieser Funktionen einen Zeiger auf das Shape-Element. Denke daran, in allen Header-Dateien Include-Schutzmechanismen zu verwenden.
Probier es selbst
#include <stdio.h>
#include "shape.h"
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: Erstelle einen Circle mit create_circle
// TODO: Rufe draw über den Funktionszeiger der eingebetteten Shape auf
// TODO: Rufe area über den Funktionszeiger der eingebetteten Shape auf
// und gib 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