Menu
Coddy logo textTech

Rechteck-Implementierung

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

challenge icon

Aufgabe

Einfach

Setzen 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 deine Shape-Schnittstelle mit den Funktionszeigertypen DrawFunc und AreaFunc aus den vorherigen Lektionen bei.
  • circle.h und circle.c: Behalte deine Circle-Implementierung aus der vorherigen Lektion bei.
  • rectangle.h: Definiere deine Struktur Rectangle hier. Ein Rechteck bettet Shape als sein erstes Element ein und fügt die Felder width und height hinzu (beide vom Typ double). Deklariere eine Konstruktorfunktion create_rectangle, die Parameter für Breite und Höhe entgegennimmt und ein Rectangle als Wert zurückgibt.
  • rectangle.c: Implementiere das rechteckspezifische Verhalten:
    • draw_rectangle: Gibt Drawing Rectangle with width: X.XX and height: X.XX aus (beide Werte werden mit 2 Nachkommastellen angezeigt).
    • area_rectangle: Gibt Breite × Höhe zurück.
    • create_rectangle: Initialisiert ein Rectangle, verknüpft die Funktionszeiger des eingebetteten Shape mit 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 sowohl draw als auch area über die Funktionszeiger des eingebetteten Shape auf. 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.00

Beispielausgabe, wenn die Eingaben 7.5 und 2.5 sind:

Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75

Genau 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

Übe selbstständig: Online-C-Compiler