Implementacja prostokąta
Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 46 z 61.
Wyzwanie
ŁatwyKontynuujmy budowanie projektu Shape Drawer, implementując Rectangle: kolejny konkretny kształt, który osadza bazową strukturę Shape, tak jak zrobiliśmy to w przypadku Circle.
Rozbudujesz istniejący projekt, dodając obsługę prostokąta w następujących plikach:
shape.h: Zachowaj bazowy interfejsShapez typami wskaźników do funkcjiDrawFunciAreaFuncz poprzednich lekcji.circle.hicircle.c: Zachowaj implementację Circle z poprzedniej lekcji.rectangle.h: Zdefiniuj tutaj strukturęRectangle. Prostokąt osadzaShapejako swój pierwszy element i dodaje polawidthorazheight(oba typudouble). Zadeklaruj funkcję konstruktoracreate_rectangle, która przyjmuje parametry width i height oraz zwraca wartość typuRectangle.rectangle.c: Zaimplementuj zachowanie specyficzne dla prostokąta:draw_rectangle: wypisujeDrawing Rectangle with width: X.XX and height: X.XX(obie wartości wyświetlane z dokładnością do 2 miejsc po przecinku)area_rectangle: zwraca iloczyn width × heightcreate_rectangle: inicjalizujeRectangle, ustawia wskaźniki do funkcji osadzonegoShapetak, aby wskazywały na funkcje prostokąta, ustawia wymiary i zwraca prostokąt
main.c: Pokaż działanie obu kształtów za pośrednictwem tego samego interfejsu. Wczytaj dwie wartości wejściowe: width i height prostokąta. Utwórz prostokąt za pomocą konstruktora, a następnie wywołaj zarównodraw, jak iareaza pośrednictwem wskaźników do funkcji osadzonegoShape. Wypisz pole powierzchni z dokładnością do 2 miejsc po przecinku.
Twój program otrzyma dwie wartości wejściowe: width i height (jako liczby zmiennoprzecinkowe).
Przykładowy wynik, gdy wartości wejściowe to 4.0 i 3.0:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00Przykładowy wynik, gdy wartości wejściowe to 7.5 i 2.5:
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75Podobnie jak Circle, Rectangle osadza Shape jako swój pierwszy element, co pozwala uzyskać dostęp do wskaźników do funkcji za pośrednictwem osadzonego elementu. Ten spójny wzorzec umożliwia polimorfizm: oba kształty mogą być obsługiwane w jednolity sposób za pośrednictwem interfejsu Shape. Pamiętaj, aby użyć strażników nagłówków we wszystkich plikach nagłówkowych.
Spróbuj swoich sił
#include <stdio.h>
#include "shape.h"
#include "rectangle.h"
int main() {
double width, height;
scanf("%lf", &width);
scanf("%lf", &height);
// TODO: Utwórz prostokąt za pomocą create_rectangle(width, height)
// TODO: Wywołaj draw przez wskaźnik do funkcji osadzony w Shape
// TODO: Wywołaj area przez wskaźnik do funkcji osadzony w Shape
// TODO: Wypisz pole z 2 miejscami po przecinku: "Area: %.2f\n"
return 0;
}Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania modularnego
Pliki nagłówkoweZabezpieczenia przed wielokrotnym dołączeniemPliki źródłoweFunkcje statycznePodsumowanie: kalkulator modularny4Enkapsulacja
Koncepcja niejawnych wskaźnikówDefiniowanie niejawnych strukturGettery i setteryWalidacja w setterachPowtórka: tajemnicze pudełko2Obiekty i metody
Struktury jako obiektyWskaźnik „self”Poprawność constWskaźnik czy wartośćMetody pomocniczePodsumowanie: menedżer punktów5Projekt: Proste konto bankowe
Konfiguracja projektuImplementacja konta8Polimorfizm
Wskaźniki do funkcji w strukturachSymulowanie metodKoncepcja interfejsuImplementowanie interfejsówIteracja polimorficznaPodsumowanie: Greeter11Wzorce projektowe w C
Wzorzec SingletonWzorzec fabrykiWzorzec iteratoraPodsumowanie: fabryka loggera3Cykl życia obiektu
Wzorzec konstruktoraWzorzec destruktoraInicjalizacja na stosieKopia głębokaPodsumowanie: klasa opakowująca ciąg znaków6Dziedziczenie przez kompozycję
Osadzanie strukturZasada pierwszego elementuDostęp do elementów klasy nadrzędnejKonwersja w górę hierarchiiPodsumowanie: hierarchia kształtów9Projekt: Rysownik kształtów
Przegląd projektuImplementacja kołaImplementacja prostokątaZastosowanie polimorfizmuKontener kształtówPoćwicz samodzielnie: Kompilator C online