Menu
Coddy logo textTech

Structs als Objekte

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

In objektorientierten Sprachen ist ein Objekt eine Entität, die Daten (Zustand) mit Funktionen bündelt, die auf diesen Daten arbeiten (Methoden). C verfügt nicht über integrierte Objekte, aber wir können dasselbe Konzept mithilfe von Strukturen und Funktionen umsetzen.

Stell dir eine Struktur als den „Daten“-Teil eines Objekts vor. Sie enthält den Zustand: die Werte, die festlegen, was das Objekt momentan ist:

typedef struct {
    int value;
} Counter;

Diese Counter-Struktur stellt eine Entität mit einem einzigen Zustandswert dar: ihrem aktuellen Wert. Um ihr Verhalten zu geben, schreiben wir Funktionen, die die Struktur als Parameter akzeptieren:

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

Diese Funktionen verhalten sich wie Methoden. Sie arbeiten speziell mit Counter-Daten. Indem wir die Struktur an Funktionen übergeben, simulieren wir, was andere Sprachen automatisch tun, wenn du counter.increment() aufrufst.

int main() {
    Counter my_counter = {0};
    counter_increment(&my_counter);
    printf("%d\n", counter_get(&my_counter)); // Gibt aus: 1
    return 0;
}

Die Namenskonvention typename_action (wie counter_increment) hilft dabei, deinen Code zu organisieren, und macht deutlich, zu welchem Struct eine Funktion gehört. Dieses Muster bildet die Grundlage der objektorientierten Programmierung in C.

challenge icon

Aufgabe

Einfach

Erstelle ein einfaches Counter-Modul, das eine Struktur als Objekt mit Verhalten behandelt. Du organisierst deinen Code auf drei Dateien verteilt, um das Muster zu üben, Daten mit Funktionen zu bündeln, die auf ihnen operieren.

Du erstellst drei Dateien:

  • counter.h: Deine Header-Datei, die die Struktur Counter mit einem einzelnen Element int value deklariert. Deklariere außerdem zwei Funktionen, die als „Methoden“ für den Zähler dienen: counter_increment (erhält einen Zeiger auf Counter und erhöht dessen Wert um 1) und counter_get (erhält einen Zeiger auf Counter und gibt dessen aktuellen Wert zurück). Verwende Include-Guards mit dem Symbol COUNTER_H.
  • counter.c: Deine Quelldatei, die beide Funktionen implementiert. Denke daran, deine Header-Datei einzubinden.
  • main.c: Deine Hauptdatei, die einen Counter erstellt, Operationen daran ausführt und die Ergebnisse anzeigt.

Du erhältst zwei ganzzahlige Eingaben: den Startwert für deinen Zähler und die Anzahl der Erhöhungen.

Initialisiere in deiner Hauptdatei einen Counter mit dem Startwert und rufe anschließend counter_increment so oft wie angegeben auf. Verwende schließlich counter_get, um den Endwert abzurufen und auszugeben.

Gib das Ergebnis in diesem Format aus:

Final value: {result}

Beispielsweise würde die Ausgabe bei einem Startwert von 5 und 3 Erhöhungen wie folgt aussehen:

Final value: 8

Probier es selbst

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

int main() {
    // Eingabe lesen
    int starting_value;
    int num_increments;
    scanf("%d", &starting_value);
    scanf("%d", &num_increments);
    
    // TODO: Erstelle einen Counter und initialisiere ihn mit starting_value
    
    // TODO: Rufe counter_increment die angegebene Anzahl von Malen auf
    
    // TODO: Verwende counter_get, um den Endwert abzurufen und ihn auszugeben
    // Ausgabeformat: "Final value: {result}"
    
    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 Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler