Повторение: Иерархия фигур
Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 32 из 61.
Задание
ЛегкоДавайте построим полную иерархию фигур, которая демонстрирует возможности наследования через композицию. Вы создадите базовый тип Shape, от которого может наследоваться любая конкретная фигура, а затем создадите Rect, который расширяет его.
Вы организуете свой код в трех файлах:
shape.h: Определите иерархию структур с использованием include guards. Создайте структуруShapeс одним полемcolor(целое число). Затем определите структуруRect, которая включаетShapeв качестве первого члена и добавляет поляwidthиheight(оба целые числа). Объявите две функции:set_color, которая принимаетShape*и новое значение цвета, иprint_rect, которая принимаетRect*.shape.c: Реализуйте обе функции. Ваша функцияset_colorработает с базовым типом — она изменяет цвет любой фигуры. Ваша функцияprint_rectотображает всю информацию о прямоугольнике, включая его унаследованный цвет.main.c: СоздайтеRectи инициализируйте все его поля. Затем продемонстрируйте восходящее приведение типов (upcasting), вызвавset_colorдля вашего прямоугольника, приведенного кShape*. Наконец, выведите данные прямоугольника, чтобы убедиться, что цвет был изменен через указатель на базовый тип.
Вы получите четыре входных значения: width (ширина) прямоугольника, его height (высота), initial color (начальный цвет) и new color (новый цвет), который нужно установить с помощью универсальной функции.
В основном файле создайте прямоугольник с начальными значениями, затем используйте set_color, чтобы изменить его цвет на новое значение (не забудьте привести Rect* к Shape*), и, наконец, вызовите print_rect для отображения результата.
Ваш вывод должен выглядеть следующим образом:
Width: 10
Height: 5
Color: 7Где 10 — это ширина, 5 — высота, а 7 — обновленный цвет (не начальный). Ключевая идея здесь заключается в том, что set_color ничего не знает о прямоугольниках — она работает только с Shape. Тем не менее, благодаря правилу первого члена и приведению типов, цвет вашего прямоугольника изменяется через эту универсальную функцию.
Попробуйте сами
#include <stdio.h>
#include "shape.h"
int main() {
int width, height, initial_color, new_color;
scanf("%d", &width);
scanf("%d", &height);
scanf("%d", &initial_color);
scanf("%d", &new_color);
// TODO: Создать Rect и инициализировать все его поля
// (width, height и цвет встроенной структуры Shape значением initial_color)
// TODO: Вызвать set_color, приведя прямоугольник к типу Shape*,
// чтобы изменить цвет на new_color
// TODO: Вызвать print_rect для отображения результата
return 0;
}
Все уроки раздела Object Oriented Programming
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация круга