Menu
Coddy logo textTech

Реализация прямоугольника

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

challenge icon

Задание

Легко

Давайте продолжим создание проекта Shape Drawer, реализовав Rectangle — еще одну конкретную фигуру, которая встраивает базовую структуру Shape, точно так же, как мы это делали с Circle.

Опираясь на ваш существующий проект, вы добавите функциональность прямоугольника в следующие файлы:

  • shape.h: Сохраните ваш базовый интерфейс Shape с типами указателей на функции DrawFunc и AreaFunc из предыдущих уроков.
  • circle.h и circle.c: Сохраните вашу реализацию Circle из предыдущего урока.
  • rectangle.h: Определите здесь структуру Rectangle. Прямоугольник встраивает Shape в качестве своего первого члена и добавляет поля width и height (оба типа double). Объявите функцию-конструктор create_rectangle, которая принимает параметры ширины и высоты и возвращает Rectangle по значению.
  • rectangle.c: Реализуйте поведение, специфичное для прямоугольника:
    • draw_rectangle — выводит Drawing Rectangle with width: X.XX and height: X.XX (оба значения отображаются с 2 знаками после запятой)
    • area_rectangle — возвращает произведение ширины на высоту
    • create_rectangle — инициализирует Rectangle, связывает указатели на функции встроенного Shape с функциями прямоугольника, устанавливает размеры и возвращает прямоугольник
  • main.c: Продемонстрируйте работу обеих фигур через один и тот же интерфейс. Считайте два входных значения: ширину и высоту для прямоугольника. Создайте прямоугольник с помощью конструктора, затем вызовите draw и area через указатели на функции встроенного Shape. Выведите площадь с 2 знаками после запятой.

Ваша программа получит два входных значения: width и height (в виде чисел с плавающей точкой).

Пример вывода, когда входные данные равны 4.0 и 3.0:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

Пример вывода, когда входные данные равны 7.5 и 2.5:

Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75

Как и в случае с Circle, Rectangle встраивает Shape в качестве своего первого члена, что позволяет вам получать доступ к указателям на функции через встроенный член. Этот последовательный паттерн — то, что обеспечивает полиморфизм: обе фигуры могут обрабатываться единообразно через их интерфейс Shape. Не забудьте использовать include guards во всех заголовочных файлах.

Попробуйте сами

#include <stdio.h>
#include "shape.h"
#include "rectangle.h"

int main() {
    double width, height;
    scanf("%lf", &width);
    scanf("%lf", &height);
    
    // TODO: Создайте прямоугольник, используя create_rectangle(width, height)
    
    // TODO: Вызовите draw через указатель на функцию встроенной структуры Shape
    
    // TODO: Вызовите area через указатель на функцию встроенной структуры Shape
    // TODO: Выведите площадь с 2 знаками после запятой: "Area: %.2f\n"
    
    return 0;
}

Все уроки раздела Object Oriented Programming