Menu
Coddy logo textTech

Hilfsmethoden

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

Bisher haben wir Funktionen gesehen, die Struct-Daten ändern (wie player_take_damage) und Funktionen, die diese einfach nur anzeigen. Es gibt jedoch noch eine weitere wichtige Kategorie: Funktionen, die abgeleitete Werte berechnen aus Struct-Elementen, ohne etwas zu ändern.

Betrachten Sie eine Rectangle-Struct, die Breite und Höhe speichert. Die Fläche wird nicht gespeichert – sie wird bei Bedarf berechnet:

typedef struct {
    double width;
    double height;
} Rectangle;

double rectangle_area(const Rectangle *self) {
    return self->width * self->height;
}

double rectangle_perimeter(const Rectangle *self) {
    return 2 * (self->width + self->height);
}

Dies sind Hilfsmethoden – sie nehmen die vorhandenen Daten des Structs und erzeugen einen neuen Wert. Beachten Sie, dass sie const-Pointer verwenden, da sie nur lesen und niemals schreiben. Das berechnete Ergebnis wird zurückgegeben, anstatt im Struct gespeichert zu werden.

Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box));       // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0

Dieses Muster hält Ihre Structs schlank – speichern Sie nur die wesentlichen Daten und berechnen Sie alles andere bei Bedarf. Es stellt außerdem sicher, dass abgeleitete Werte immer konsistent mit dem aktuellen Zustand sind.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Circle-Modul erstellen, das abgeleitete Werte aus gespeicherten Daten berechnet. Sie werden das Schreiben von Hilfsmethoden üben – Funktionen, die Ergebnisse aus Struct-Membern berechnen, ohne diese zu verändern.

Sie werden drei Dateien erstellen:

  • circle.h: Deklarieren Sie ein Circle-Struct mit einem einzelnen double radius Member. Deklarieren Sie außerdem zwei Hilfsmethoden:
    • circle_area — nimmt einen const-Pointer auf Circle entgegen und gibt die Fläche zurück
    • circle_circumference — nimmt einen const-Pointer auf Circle entgegen und gibt den Umfang zurück
    Verwenden Sie Include-Guards mit dem Symbol CIRCLE_H.
  • circle.c: Implementieren Sie beide Hilfsmethoden. Verwenden Sie für die Berechnungen 3.14159 als Wert für Pi. Die Formel für die Fläche lautet pi * radius * radius, und die Formel für den Umfang lautet 2 * pi * radius. Beide Funktionen sollten den Radius nur lesen – niemals modifizieren.
  • main.c: Erstellen Sie einen Circle und verwenden Sie die Hilfsmethoden, um seine Eigenschaften zu berechnen und anzuzeigen.

Sie erhalten eine Eingabe: den radius des Kreises (als Double).

Initialisieren Sie in Ihrer Hauptdatei einen Circle mit dem gegebenen Radius und verwenden Sie dann Ihre Hilfsmethoden, um die Fläche und den Umfang zu berechnen und auszugeben.

Geben Sie die Ergebnisse in diesem Format aus:

Area: {area}
Circumference: {circumference}

Verwenden Sie %.2f für beide Werte, um zwei Dezimalstellen anzuzeigen.

Zum Beispiel wäre bei einem Radius von 5.0 die Ausgabe:

Area: 78.54
Circumference: 31.42

Spickzettel

Funktionen können abgeleitete Werte aus Struct-Membern berechnen, ohne das Struct zu verändern. Diese werden als Hilfsmethoden (helper methods) bezeichnet.

Hilfsmethoden verwenden const-Pointer, da sie Daten nur lesen und niemals schreiben:

typedef struct {
    double width;
    double height;
} Rectangle;

double rectangle_area(const Rectangle *self) {
    return self->width * self->height;
}

double rectangle_perimeter(const Rectangle *self) {
    return 2 * (self->width + self->height);
}

Verwendung von Hilfsmethoden:

Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box));       // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0

Dieses Muster hält Structs schlank, indem nur wesentliche Daten gespeichert und abgeleitete Werte bei Bedarf berechnet werden, was die Konsistenz mit dem aktuellen Zustand gewährleistet.

Probier es selbst

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Erstelle eine Circle-Struktur mit dem gegebenen Radius
    
    // TODO: Verwende die Hilfsmethoden circle_area und circle_circumference
    // um die Ergebnisse zu berechnen und auszugeben
    
    // Ausgabeformat:
    // printf("Area: %.2f\n", ...);
    // printf("Circumference: %.2f\n", ...);
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Object Oriented Programming