Wiederholung: Greeter
Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 43 von 61.
Aufgabe
EinfachLassen 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 namensGreetFunc, der einenconst char*(einen zu grüßenden Namen) entgegennimmt und nichts zurückgibt. Definieren Sie dann einenGreeter-Struct, der einlanguage(einconst char*) und einengreet-Funktionszeiger vom TypGreetFuncenthält.greeter.c: Implementieren Sie die Begrüßungsfunktionen, die verschiedene Sprachen repräsentieren:greet_english— gibtHello, name!ausgreet_spanish— gibtHola, name!aus
main.c: Führen Sie hier alles zusammen. Erstellen Sie zweiGreeter-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 diegreet-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
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-Implementierung