Menu
Coddy logo textTech

Implementacja koła

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

challenge icon

Wyzwanie

Łatwy

Kontynuujmy budowanie projektu Shape Drawer, implementując Circle: konkretny kształt, który osadza bazową strukturę Shape i zapewnia własną logikę rysowania oraz obliczania pola.

Rozwijając podstawy z poprzedniej lekcji, rozszerzysz swój projekt o następujące pliki:

  • shape.h: Zachowaj bazowy interfejs Shape z poprzedniej lekcji, wraz z typami wskaźników do funkcji DrawFunc i AreaFunc.
  • circle.h: Zdefiniuj tutaj strukturę Circle. Okrąg osadza Shape jako swój pierwszy element (co umożliwia rzutowanie w górę zgodnie z regułą pierwszego elementu) i dodaje pole radius typu double. Zadeklaruj funkcję konstruktora create_circle, która przyjmuje promień i zwraca wartość typu Circle.
  • circle.c: Zaimplementuj tutaj zachowanie specyficzne dla okręgu:
    • draw_circle: wypisuje Drawing Circle with radius: X.XX (promień wyświetlany z dokładnością do 2 miejsc po przecinku)
    • area_circle: zwraca π × promień² (użyj 3.14159 jako wartości π)
    • create_circle: inicjalizuje Circle, przypisuje wskaźniki do funkcji osadzonej struktury Shape, aby wskazywały na draw_circle i area_circle, ustawia promień i zwraca okrąg
  • main.c: Połącz wszystkie elementy. Wczytaj wartość promienia, utwórz okrąg za pomocą konstruktora, a następnie wywołaj zarówno draw, jak i area za pośrednictwem wskaźników do funkcji osadzonej struktury Shape. Wypisz pole z dokładnością do 2 miejsc po przecinku.

Twój program otrzyma jedno dane wejściowe: wartość promienia (jako liczbę zmiennoprzecinkową).

Przykładowe wyjście dla danych wejściowych 5.0:

Drawing Circle with radius: 5.00
Area: 78.54

Przykładowe wyjście dla danych wejściowych 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

Kluczowa kwestia jest taka, że Circle zawiera Shape jako swój pierwszy element, więc możesz uzyskać dostęp do wskaźników do funkcji przez circle.base.draw i circle.base.area (lub przez element osadzony, któremu nadasz inną nazwę). Wywołując te funkcje, przekaż wskaźnik do elementu Shape. Pamiętaj, aby używać strażników dołączania we wszystkich plikach nagłówkowych.

Spróbuj swoich sił

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Utwórz Circle za pomocą create_circle
    
    // TODO: Wywołaj draw przez wskaźnik do funkcji w osadzonym Shape
    
    // TODO: Wywołaj area przez wskaźnik do funkcji w osadzonym Shape
    // i wypisz z 2 miejscami po przecinku: "Area: %.2f\n"
    
    return 0;
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online