Wiederholung: Greeter
Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 43 von 61.
Aufgabe
EinfachWir erstellen ein Greeter-System, das Polymorphismus durch Funktionszeiger demonstriert: Derselbe Strukturtyp erzeugt je nach der eingebundenen Begrüßungsfunktion unterschiedliche Ausgaben.
Du organisierst deinen Code auf drei Dateien verteilt:
greeter.h: Definiere hier deine Greeter-Schnittstelle. Erstelle einen Funktionszeigertyp namensGreetFunc, der einenconst char*(einen zu begrüßenden Namen) übernimmt und nichts zurückgibt. Definiere anschließend eineGreeter-Struktur, die einlanguage(einconst char*) und einen Funktionszeigergreetvom TypGreetFuncenthält.greeter.c: Implementiere die Begrüßungsfunktionen, die verschiedene Sprachen repräsentieren:greet_english: gibtHello, name!ausgreet_spanish: gibtHola, name!aus
main.c: Führe hier alles zusammen. Erstelle zweiGreeter-Instanzen, eine für Englisch und eine für Spanisch, und verknüpfe jede mit ihrer entsprechenden Begrüßungsfunktion. Lies einen Namen als Eingabe ein und rufe anschließend bei beiden Greeter-Instanzen die Funktiongreetauf, um polymorphes Verhalten zu demonstrieren.
Dein Programm erhält eine einzelne Eingabe: einen zu begrüßenden Namen.
Erstelle einen englischen Greeter mit dem auf English gesetzten language und einen spanischen Greeter mit dem auf Spanish gesetzten language. Gib für jeden Greeter seine Sprache gefolgt von einem Doppelpunkt und einem Leerzeichen aus und rufe anschließend seine Funktion greet mit dem Eingabenamen auf.
Beispielausgabe bei der Eingabe Maria:
English: Hello, Maria!
Spanish: Hola, Maria!Beispielausgabe bei der Eingabe Carlos:
English: Hello, Carlos!
Spanish: Hola, Carlos!Beide Greeter-Instanzen haben denselben Typ Greeter und erzeugen dennoch unterschiedliche Begrüßungen, weil jeder Instanz eine andere Funktion für ihr greet-Member zugewiesen wurde. Denke daran, Include-Guards in deiner Header-Datei zu verwenden.
Probier es selbst
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// Lies die Namenseingabe
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 die language gefolgt von ": " aus
// 2. Rufe die greet-Funktion mit dem name auf
return 0;
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der modularen Programmierung
Header-DateienInclude GuardsQuelldateienStatische FunktionenWiederholung: Modularer Taschenrechner4Kapselung
Konzept der Opaque PointersOpaque Structs definierenGetter und SetterValidierung in SetternRückblick: Die geheime Box2Objekte und Methoden
Structs als ObjekteDer 'Self'-PointerConst-CorrectnessPointer vs. WertHilfsmethodenZusammenfassung: Point Manager5Projekt: Einfaches Bankkonto
Projekt-SetupImplementierung des Kontos8Polymorphismus
Funktionszeiger in StructsMethoden simulierenDas Interface-KonzeptInterfaces implementierenPolymorphe IterationWiederholung: Greeter3Objekt-Lebenszyklus
Konstruktor-MusterDestruktor-MusterStack-InitialisierungTiefe KopieRückblick: String-Wrapper6Vererbung durch Komposition
Struct-EinbettungDie First-Member-RegelZugriff auf Parent-MemberUpcastingRückblick: Formenhierarchie9Projekt: Formen-Zeichner
ProjektübersichtKreis-ImplementierungRechteck-ImplementierungPolymorphe VerwendungShape-ContainerÜbe selbstständig: Online-C-Compiler