Menu
Coddy logo textTech

Wiederholung: Greeter

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Greeter-System bauen, das Polymorphie durch Funktionszeiger demonstriert — derselbe Struct-Typ erzeugt unterschiedliche Ausgaben, je nachdem, welche Begrüßungsfunktion eingebunden ist.

Sie werden Ihren Code in drei Dateien organisieren:

  • greeter.h: Definieren Sie hier Ihr Greeter-Interface. Erstellen Sie einen Funktionszeigertyp namens GreetFunc, der einen const char* (einen zu grüßenden Namen) entgegennimmt und nichts zurückgibt. Definieren Sie dann einen Greeter-Struct, der ein language (ein const char*) und einen greet-Funktionszeiger vom Typ GreetFunc enthält.
  • greeter.c: Implementieren Sie die Begrüßungsfunktionen, die verschiedene Sprachen repräsentieren:
    • greet_english — gibt Hello, name! aus
    • greet_spanish — gibt Hola, name! aus
  • main.c: Führen Sie hier alles zusammen. Erstellen Sie zwei Greeter-Instanzen — eine für English und eine für Spanish — die jeweils mit ihrer entsprechenden Begrüßungsfunktion verknüpft sind. Lesen Sie einen Namen als Eingabe ein und rufen Sie dann die greet-Funktion für beide Greeter auf, um polymorphes Verhalten zu demonstrieren.

Ihr Programm erhält eine einzige Eingabe: einen Namen, der begrüßt werden soll.

Erstellen Sie einen englischen Greeter, bei dem language auf English gesetzt ist, und einen spanischen Greeter, bei dem language auf Spanish gesetzt ist. Geben Sie für jeden Greeter seine Sprache gefolgt von einem Doppelpunkt und einem Leerzeichen aus und rufen Sie dann seine greet-Funktion mit dem eingegebenen Namen auf.

Beispielausgabe, wenn die Eingabe Maria ist:

English: Hello, Maria!
Spanish: Hola, Maria!

Beispielausgabe, wenn die Eingabe Carlos ist:

English: Hello, Carlos!
Spanish: Hola, Carlos!

Beide Greeter sind vom selben Greeter-Typ, erzeugen jedoch unterschiedliche Begrüßungen, da jedem eine andere Funktion seinem greet-Member zugewiesen wurde. Denken Sie daran, Include-Guards in Ihrer Header-Datei zu verwenden.

Probier es selbst

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

int main() {
    // Lies die Namenseingabe ein
    char name[100];
    scanf("%s", name);
    
    // TODO: Erstelle einen englischen Greeter
    // - Setze language auf "English"
    // - Setze greet auf die Funktion greet_english
    
    
    // TODO: Erstelle einen spanischen Greeter
    // - Setze language auf "Spanish"
    // - Setze greet auf die Funktion greet_spanish
    
    
    // TODO: Für jeden Greeter:
    // 1. Gib language gefolgt von ": " aus
    // 2. Rufe die Funktion greet mit name auf
    
    
    return 0;
}

Alle Lektionen in Object Oriented Programming