Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 32 из 61.

challenge icon

Задание

Легко

Давайте построим полную иерархию фигур, демонстрирующую возможности наследования через композицию. Вы создадите базовый тип Shape, от которого сможет наследоваться любая конкретная фигура, а затем построите Rect, расширяющий его.

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

  • shape.h: Определите иерархию структур с защитой от повторного включения. Создайте структуру Shape с единственным полем color (целым числом). Затем определите структуру Rect, которая встраивает Shape в качестве своего первого члена и добавляет поля width и height (оба целые числа). Объявите две функции: set_color, которая принимает Shape* и новое значение цвета, и print_rect, которая принимает Rect*.
  • shape.c: Реализуйте обе функции. Ваша функция set_color работает с базовым типом. Она изменяет цвет любой фигуры. Ваша функция print_rect отображает всю информацию о прямоугольнике, включая его унаследованный цвет.
  • main.c: Создайте Rect и initialize все его поля. Затем продемонстрируйте восходящее приведение, вызвав set_color с вашим прямоугольником, приведённым к типу Shape*. Наконец, выведите прямоугольник, чтобы убедиться, что цвет был изменён через указатель на базовый тип.

Вы получите четыре входных значения: width прямоугольника, его height, initial color и new color, который нужно установить с помощью универсальной функции.

В основном файле создайте прямоугольник с начальными значениями, затем используйте set_color, чтобы изменить его цвет на новое значение (не забудьте привести ваш Rect* к Shape*), и наконец вызовите print_rect, чтобы отобразить результат.

Ваш вывод должен выглядеть так:

Width: 10
Height: 5
Color: 7

Здесь 10 — это width, 5 — height, а 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;
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор C