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