Реализация прямоугольника
Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 46 из 61.
Задание
ЛегкоПродолжим создание проекта 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 × heightcreate_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;
}Все уроки раздела Объектно-ориентированное программирование
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация кругаРеализация прямоугольникаПолиморфное использованиеКонтейнер фигурПотренируйтесь самостоятельно: Онлайн-компилятор C