Podsumowanie: Greeter
Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 43 z 61.
Wyzwanie
ŁatwyZbudujmy 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 nazwieGreetFunc, który przyjmujeconst char*(imię, które ma zostać powitane) i niczego nie zwraca. Następnie zdefiniuj strukturęGreeterzawierającąlanguage(typuconst char*) oraz wskaźnik do funkcjigreettypuGreetFunc.greeter.c: Zaimplementuj funkcje powitania reprezentujące różne języki:greet_english: wypisujeHello, name!greet_spanish: wypisujeHola, name!
main.c: Połącz tutaj wszystkie elementy. Utwórz dwie instancjeGreeter, 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ęgreetobu 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
1Podstawy programowania modularnego
Pliki nagłówkoweZabezpieczenia przed wielokrotnym dołączeniemPliki źródłoweFunkcje statycznePodsumowanie: kalkulator modularny4Enkapsulacja
Koncepcja niejawnych wskaźnikówDefiniowanie niejawnych strukturGettery i setteryWalidacja w setterachPowtórka: tajemnicze pudełko2Obiekty i metody
Struktury jako obiektyWskaźnik „self”Poprawność constWskaźnik czy wartośćMetody pomocniczePodsumowanie: menedżer punktów5Projekt: Proste konto bankowe
Konfiguracja projektuImplementacja konta8Polimorfizm
Wskaźniki do funkcji w strukturachSymulowanie metodKoncepcja interfejsuImplementowanie interfejsówIteracja polimorficznaPodsumowanie: Greeter11Wzorce projektowe w C
Wzorzec SingletonWzorzec fabrykiWzorzec iteratoraPodsumowanie: fabryka loggera3Cykl życia obiektu
Wzorzec konstruktoraWzorzec destruktoraInicjalizacja na stosieKopia głębokaPodsumowanie: klasa opakowująca ciąg znaków6Dziedziczenie przez kompozycję
Osadzanie strukturZasada pierwszego elementuDostęp do elementów klasy nadrzędnejKonwersja w górę hierarchiiPodsumowanie: hierarchia kształtów9Projekt: Rysownik kształtów
Przegląd projektuImplementacja kołaImplementacja prostokątaZastosowanie polimorfizmuKontener kształtówPoćwicz samodzielnie: Kompilator C online