Menu
Coddy logo textTech

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

Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 43 из 61.

challenge icon

Задание

Легко

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

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

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

Ваша программа получит на вход одно значение: имя для приветствия.

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

Пример вывода, если на вход подано Maria:

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

Пример вывода, если на вход подано Carlos:

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

Оба объекта приветствия имеют один и тот же тип 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;
}

Все уроки раздела Object Oriented Programming