Menu
Coddy logo textTech

Struct-Einbettung

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

In objektorientierten Sprachen wie C++ oder Java ermöglicht Vererbung einer Klasse, Eigenschaften von einer übergeordneten Klasse zu übernehmen. C verfügt nicht über eine integrierte Vererbung, aber wir können sie mithilfe einer Technik namens Komposition simulieren: indem wir eine Struktur in eine andere einfügen.

Die Idee ist einfach: Wenn ein Child alle Eigenschaften eines Parent benötigt, betten wir die Struktur Parent als Mitglied von Child ein.

typedef struct {
    int id;
    char name[50];
} Parent;

typedef struct {
    Parent parent;  // Eingebettetes Struct
    int grade;
} Child;

Hier enthält Child alles, was Parent hat, sowie sein eigenes Feld grade. Dies ist Komposition: Das Kind „hat einen“ Parent, anstatt „ein“ Parent zu sein, aber der Effekt ähnelt der Vererbung.

Um über eine untergeordnete Instanz auf die Member des übergeordneten Elements zuzugreifen, verwendest du zweimal den Punktoperator:

Child c;
c.parent.id = 101;
c.parent.name[0] = 'A';
c.grade = 5;

Dieses Muster bildet die Grundlage für den Aufbau von Typhierarchien in C. Indem wir eine Basisstruktur als first member einbetten, erschließen wir leistungsstarke Techniken, die wir in den kommenden Lektionen erkunden werden.

challenge icon

Aufgabe

Einfach

Erstellen wir ein einfaches Mitarbeiterverwaltungssystem, das die Einbettung von Strukturen demonstriert: die Grundlage der Vererbung in C.

Du erstellst eine Hierarchie, in der ein Employee einen Person enthält. Dies spiegelt wider, wie Vererbung funktioniert: Ein Mitarbeiter „ist ein“ Person-Objekt mit zusätzlichen arbeitsbezogenen Informationen. Indem du die Struktur Person in Employee einbettest, erhältst du alle Eigenschaften der Person sowie die mitarbeiterspezifischen Felder.

Du organisierst deinen Code auf drei Dateien verteilt:

  • types.h: Definiere hier beide Strukturen mit Include-Schutz. Erstelle zuerst eine Person-Struktur mit zwei Feldern: name (ein Zeichenarray mit 50 Zeichen) und age (eine Ganzzahl). Definiere anschließend eine Employee-Struktur, die Person als erstes Mitglied einbettet und ein Feld employee_id (eine Ganzzahl) hinzufügt.
  • types.c: Implementiere eine Funktion namens print_employee, die einen Zeiger auf einen Employee entgegennimmt und dessen Informationen ausgibt. Greife mithilfe der verketteten Punkt-/Pfeil-Syntax, die du gelernt hast, auf die Daten der eingebetteten Person zu.
  • main.c: Erstelle eine Employee-Variable, befülle alle ihre Felder (einschließlich des Namens und Alters der eingebetteten Person) und verwende deine Ausgabefunktion, um die Informationen anzuzeigen.

Du erhältst drei Eingaben: den Namen des Mitarbeiters (eine Zeichenkette), sein Alter (eine Ganzzahl) und seine Mitarbeiter-ID (eine Ganzzahl).

Deine Funktion print_employee sollte die Informationen des Mitarbeiters in folgendem Format ausgeben:

Employee: Alice
Age: 28
ID: 1001

Dabei ist Alice der Name, 28 das Alter und 1001 die Mitarbeiter-ID aus deinen Eingaben.

Denke daran, auf die Mitglieder der eingebetteten Struktur über das übergeordnete Mitglied zuzugreifen. Um beispielsweise den Namen zu erreichen, navigierst du zuerst über das Mitglied person.

Probier es selbst

#include <stdio.h>
#include <string.h>
#include "types.h"

int main() {
    // Eingabe lesen
    char name[50];
    int age;
    int employee_id;
    
    fgets(name, 50, stdin);
    name[strcspn(name, "\n")] = '\0';  // Zeilenumbruch entfernen
    scanf("%d", &age);
    scanf("%d", &employee_id);
    
    // TODO: Erstelle eine Employee-Variable
    
    // TODO: Befülle den Namen und das Alter der eingebetteten Person
    // Hinweis: Verwende strcpy für den Namen, Zugriff mit employee.person.name
    
    // TODO: Setze die employee_id
    
    // TODO: Rufe print_employee mit einem Zeiger auf deinen employee auf
    
    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