Menu
Coddy logo textTech

Implementacja prostokąta

Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 46 z 61.

challenge icon

Wyzwanie

Łatwy

Kontynuujmy 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 interfejs Shape z typami wskaźników do funkcji DrawFunc i AreaFunc z poprzednich lekcji.
  • circle.h i circle.c: Zachowaj implementację Circle z poprzedniej lekcji.
  • rectangle.h: Zdefiniuj tutaj strukturę Rectangle. Prostokąt osadza Shape jako swój pierwszy element i dodaje pola width oraz height (oba typu double). Zadeklaruj funkcję konstruktora create_rectangle, która przyjmuje parametry width i height oraz zwraca wartość typu Rectangle.
  • rectangle.c: Zaimplementuj zachowanie specyficzne dla prostokąta:
    • draw_rectangle: wypisuje Drawing 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 × height
    • create_rectangle: inicjalizuje Rectangle, ustawia wskaźniki do funkcji osadzonego Shape tak, 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ówno draw, jak i area za pośrednictwem wskaźników do funkcji osadzonego Shape. 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.00

Przykł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.75

Podobnie 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

Poćwicz samodzielnie: Kompilator C online