Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по 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 как свой first member и добавляет поля width и height (оба типа double). Объявите функцию-конструктор create_rectangle, которая принимает параметры width и height и возвращает Rectangle по значению.
  • rectangle.c: Реализуйте поведение, специфичное для прямоугольника:
    • draw_rectangle: выводит Drawing Rectangle with width: X.XX and height: X.XX (оба значения отображаются с 2 знаками после запятой)
    • area_rectangle: возвращает width × height
    • create_rectangle: инициализирует Rectangle, связывает указатели на функции встроенного Shape с функциями прямоугольника, задаёт размеры и возвращает прямоугольник
  • main.c: Продемонстрируйте работу обеих фигур через один и тот же интерфейс. Считайте два входных значения: width и height прямоугольника. Создайте прямоугольник с помощью конструктора, затем вызовите 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 в качестве своего first member, что позволяет обращаться к указателям на функции через встроенный member. Этот единообразный шаблон обеспечивает полиморфизм: с обеими фигурами можно работать одинаково через их интерфейс Shape. Не забудьте использовать защиту от повторного включения во всех заголовочных файлах.

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

#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;
}

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

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