Menu
Coddy logo textTech

Kreis-Implementierung

Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 45 von 61.

challenge icon

Aufgabe

Einfach

Lassen Sie uns das Shape Drawer-Projekt weiter ausbauen, indem wir den Circle implementieren — eine konkrete Form, die das Basis-Shape-Struct einbettet und ihre eigene Zeichen- und Flächenlogik bereitstellt.

Aufbauend auf der Grundlage der vorherigen Lektion werden Sie Ihr Projekt um diese Dateien erweitern:

  • shape.h: Behalten Sie Ihr Basis-Shape-Interface aus der vorherigen Lektion mit den Funktionszeigertypen DrawFunc und AreaFunc bei.
  • circle.h: Definieren Sie hier Ihr Circle-Struct. Ein Kreis bettet Shape als sein erstes Mitglied ein (was die "First Member Rule" für das Upcasting ermöglicht) und fügt ein radius-Feld vom Typ double hinzu. Deklarieren Sie eine Konstruktorfunktion create_circle, die einen Radius entgegennimmt und einen Circle als Wert zurückgibt.
  • circle.c: Implementieren Sie hier das kreisspezifische Verhalten:
    • draw_circle — gibt Drawing Circle with radius: X.XX aus (Radius mit 2 Dezimalstellen angezeigt)
    • area_circle — gibt π × radius² zurück (verwenden Sie 3.14159 für π)
    • create_circle — initialisiert einen Circle, verknüpft die Funktionszeiger des eingebetteten Shape so, dass sie auf draw_circle und area_circle zeigen, setzt den Radius und gibt den Kreis zurück
  • main.c: Bringen Sie alles zusammen. Lesen Sie einen Radiuswert als Eingabe ein, erstellen Sie einen Kreis mit Ihrem Konstruktor und rufen Sie dann sowohl draw als auch area über die Funktionszeiger des eingebetteten Shape auf. Geben Sie die Fläche mit 2 Dezimalstellen aus.

Ihr Programm erhält eine Eingabe: einen radius-Wert (als Gleitkommazahl).

Beispielhafte Ausgabe, wenn die Eingabe 5.0 ist:

Drawing Circle with radius: 5.00
Area: 78.54

Beispielhafte Ausgabe, wenn die Eingabe 3.5 ist:

Drawing Circle with radius: 3.50
Area: 38.48

Die entscheidende Erkenntnis ist, dass Circle ein Shape als erstes Mitglied enthält, sodass Sie auf die Funktionszeiger über circle.base.draw und circle.base.area (oder wie auch immer Sie das eingebettete Mitglied nennen) zugreifen können. Übergeben Sie beim Aufruf dieser Funktionen einen Zeiger auf das Shape-Mitglied. Denken Sie daran, in allen Header-Dateien Include-Guards zu verwenden.

Probier es selbst

#include <stdio.h>
#include "shape.h"
#include "circle.h"

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Erstellen Sie einen Kreis mit create_circle
    
    // TODO: Rufen Sie draw über den Funktionszeiger des eingebetteten Shape auf
    
    // TODO: Rufen Sie area über den Funktionszeiger des eingebetteten Shape auf
    // und geben Sie das Ergebnis mit 2 Dezimalstellen aus: "Area: %.2f\n"
    
    return 0;
}

Alle Lektionen in Object Oriented Programming