Menu
Coddy logo textTech

Kreis-Implementierung

Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 45 von 61.

challenge icon

Aufgabe

Einfach

Fahren 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 grundlegende Shape-Schnittstelle aus der vorherigen Lektion mit den Funktionszeigertypen DrawFunc und AreaFunc bei.
  • circle.h: Definiere hier deine Circle-Struktur. Ein Kreis bettet Shape als sein erstes Element ein (wodurch die Regel für das Hochstufen des ersten Elements ermöglicht wird) und fügt ein Feld radius vom Typ double hinzu. Deklariere eine Konstruktorfunktion create_circle, die einen Radius entgegennimmt und einen Circle als Wert zurückgibt.
  • circle.c: Implementiere hier das kreisspezifische Verhalten:
    • draw_circle: gibt Drawing Circle with radius: X.XX aus (der Radius wird mit 2 Dezimalstellen angezeigt)
    • area_circle: gibt π × Radius² zurück (verwende 3.14159 für π)
    • create_circle: initialisiert einen Circle, verknüpft die Funktionszeiger des eingebetteten Shape mit draw_circle und area_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 sowohl draw als auch area über die Funktionszeiger des eingebetteten Shape auf. 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.54

Beispielausgabe bei der Eingabe 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

Die 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

Übe selbstständig: Online-C-Compiler