Menu
Coddy logo textTech

Podsumowanie: Greeter

Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 43 z 61.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system Greeter, który demonstruje polimorfizm za pomocą wskaźników do funkcji: ten sam typ struktury generuje różne wyniki w zależności od tego, która funkcja powitania została przypisana.

Rozmieścisz swój kod w trzech plikach:

  • greeter.h: Zdefiniuj tutaj interfejs powitania. Utwórz typ wskaźnika do funkcji o nazwie GreetFunc, który przyjmuje const char* (imię, które ma zostać powitane) i niczego nie zwraca. Następnie zdefiniuj strukturę Greeter zawierającą language (typu const char*) oraz wskaźnik do funkcji greet typu GreetFunc.
  • greeter.c: Zaimplementuj funkcje powitania reprezentujące różne języki:
    • greet_english: wypisuje Hello, name!
    • greet_spanish: wypisuje Hola, name!
  • main.c: Połącz tutaj wszystkie elementy. Utwórz dwie instancje Greeter, jedną dla języka angielskiego i jedną dla hiszpańskiego, każdą przypisaną do odpowiedniej funkcji powitania. Wczytaj imię, a następnie wywołaj funkcję greet obu obiektów powitania, aby zademonstrować polimorficzne zachowanie.

Twój program otrzyma jedno wejście: imię do powitania.

Utwórz obiekt powitania w języku angielskim z wartością English dla pola language oraz obiekt powitania w języku hiszpańskim z wartością Spanish dla pola language. Dla każdego obiektu powitania wypisz jego język, po którym następuje dwukropek i spacja, a następnie wywołaj jego funkcję greet z wczytanym imieniem.

Przykładowy wynik, gdy wejściem jest Maria:

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

Przykładowy wynik, gdy wejściem jest Carlos:

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

Oba obiekty powitania mają ten sam typ Greeter, a mimo to generują różne powitania, ponieważ każdemu przypisano inną funkcję w polu greet. Pamiętaj, aby użyć strażników dołączania w pliku nagłówkowym.

Spróbuj swoich sił

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

int main() {
    // Wczytaj imię
    char name[100];
    scanf("%s", name);
    
    // TODO: Utwórz obiekt powitania w języku angielskim
    // - Ustaw language na "English"
    // - Ustaw greet na funkcję greet_english
    
    
    // TODO: Utwórz obiekt powitania w języku hiszpańskim
    // - Ustaw language na "Spanish"
    // - Ustaw greet na funkcję greet_spanish
    
    
    // TODO: Dla każdego obiektu powitania:
    // 1. Wypisz language, a po nim ": "
    // 2. Wywołaj funkcję greet z imieniem
    
    
    return 0;
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online