Menu
Coddy logo textTech

Повторение: Иерархия фигур

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

challenge icon

Задание

Легко

Давайте построим полную иерархию фигур, которая демонстрирует возможности наследования через композицию. Вы создадите базовый тип 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