Menu
Coddy logo textTech

Podsumowanie: hierarchia kształtów

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

challenge icon

Wyzwanie

Łatwy

Zbudujmy kompletną hierarchię kształtów, która pokazuje, jak działa dziedziczenie przez kompozycję. Utworzysz bazowy typ Shape, po którym będzie mogła dziedziczyć każda konkretna figura, a następnie zbudujesz typ Rect, który go rozszerza.

Rozmieścisz swój kod w trzech plikach:

  • shape.h: Zdefiniuj hierarchię struktur i strażniki dołączania. Utwórz strukturę Shape z jednym polem color (liczbą całkowitą). Następnie zdefiniuj strukturę Rect, która osadza Shape jako swój pierwszy element i dodaje pola width oraz height (oba typu całkowitego). Zadeklaruj dwie funkcje: set_color, która przyjmuje Shape* i nową wartość koloru, oraz print_rect, która przyjmuje Rect*.
  • shape.c: Zaimplementuj obie funkcje. Funkcja set_color działa z typem bazowym. Zmienia kolor dowolnego kształtu. Funkcja print_rect wyświetla wszystkie informacje o prostokącie, w tym odziedziczony kolor.
  • main.c: Utwórz Rect i zainicjalizuj wszystkie jego pola. Następnie zademonstruj rzutowanie w górę, wywołując set_color z prostokątem rzutowanym na Shape*. Na koniec wyświetl prostokąt, aby sprawdzić, czy kolor został zmieniony za pośrednictwem wskaźnika typu bazowego.

Otrzymasz cztery dane wejściowe: szerokość prostokąta, jego wysokość, kolor początkowy oraz nowy kolor, który należy ustawić za pomocą funkcji ogólnej.

W pliku głównym utwórz prostokąt z wartościami początkowymi, a następnie użyj set_color, aby zmienić jego kolor na nową wartość (pamiętaj, aby rzutować Rect* na Shape*), i na koniec wywołaj print_rect, aby wyświetlić wynik.

Wynik powinien wyglądać tak:

Width: 10
Height: 5
Color: 7

Gdzie 10 to szerokość, 5 to wysokość, a 7 to zaktualizowany kolor (nie kolor początkowy). Kluczowe jest to, że set_color nic nie wie o prostokątach. Działa tylko z typem Shape. Jednak dzięki regule pierwszego elementu i rzutowaniu w górę kolor prostokąta zostaje zmieniony za pomocą tej funkcji ogólnej.

Spróbuj swoich sił

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

int main() {
    int width, height, initial_color, new_color;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &initial_color);
    scanf("%d", &new_color);
    
    // TODO: Utwórz Rect i zainicjalizuj wszystkie jego pola
    // (width, height oraz kolor osadzonej struktury Shape wartością initial_color)
    
    // TODO: Wywołaj set_color, rzutując prostokąt na Shape*
    // aby zmienić kolor na new_color
    
    // TODO: Wywołaj print_rect, aby wyświetlić wynik
    
    return 0;
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online