Menu
Coddy logo textTech

Повторение: Greeter

Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 43 из 61.

challenge icon

Задание

Легко

Давайте создадим систему Greeter, демонстрирующую полиморфизм с помощью указателей на функции: один и тот же тип структуры создаёт разные результаты в зависимости от того, какая функция приветствия подключена.

Вы организуете код в трёх файлах:

  • greeter.h: здесь Define интерфейс greeter. Create тип указателя на функцию с именем GreetFunc, который принимает const char* (имя, которое нужно поприветствовать) и ничего не возвращает. Затем Define структуру Greeter, содержащую language (тип const char*) и указатель на функцию greet типа GreetFunc.
  • greeter.c: Implement функции приветствия, представляющие разные языки:
    • greet_english: выводит Hello, name!
    • greet_spanish: выводит Hola, name!
  • main.c: объедините здесь всё вместе. Create два экземпляра Greeter: один для English, а другой для Spanish, каждый из которых подключён к соответствующей функции приветствия. Считайте имя в качестве input, затем вызовите функцию greet у обоих greeter, чтобы продемонстрировать полиморфное поведение.

Ваша программа получит один input: name, которое нужно поприветствовать.

Create greeter для English, установив language в English, и greeter для Spanish, установив language в Spanish. Для каждого greeter выведите его language, затем двоеточие и пробел, после чего вызовите его функцию greet с input name.

Пример вывода, если input — Maria:

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

Пример вывода, если input — Carlos:

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

Оба greeter имеют один и тот же тип Greeter, однако они выводят разные приветствия, поскольку каждому назначена своя функция в его члене greet. Не забудьте использовать include guards в файле заголовка.

Попробуйте сами

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

int main() {
    // Прочитать ввод имени
    char name[100];
    scanf("%s", name);
    
    // TODO: Создать английский greeter
    // - Установить language в "English"
    // - Установить greet на функцию greet_english
    
    
    // TODO: Создать испанский greeter
    // - Установить language в "Spanish"
    // - Установить greet на функцию greet_spanish
    
    
    // TODO: Для каждого greeter:
    // 1. Вывести language, за которым следует ": "
    // 2. Вызвать функцию greet с name
    
    
    return 0;
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор C