Повторение: Greeter
Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 43 из 61.
Задание
ЛегкоДавайте создадим систему 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
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета8Полиморфизм
Указатели на функции в структурахСимуляция методовКонцепция интерфейсовРеализация интерфейсовПолиморфная итерацияПовторение: Greeter3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация круга