Menu
Coddy logo textTech

Struktury jako obiekty

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

W językach obiektowych obiekt to jednostka, która łączy dane (stan) z funkcjami działającymi na tych danych (metodami). C nie ma wbudowanych obiektów, ale możemy osiągnąć ten sam efekt za pomocą struktur i funkcji.

Pomyśl o strukturze jako o części obiektu zawierającej „dane”. Przechowuje ona stan: wartości, które określają, czym obiekt jest w danej chwili:

typedef struct {
    int value;
} Counter;

Ta struktura Counter reprezentuje obiekt z jednym elementem stanu: jego bieżącą wartością. Aby nadać mu zachowanie, piszemy funkcje, które przyjmują tę strukturę jako parametr:

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

Te funkcje działają jak metody. Operują konkretnie na danych typu Counter. Przekazując strukturę do funkcji, symulujemy to, co inne języki robią automatycznie, gdy wywołujesz counter.increment().

int main() {
    Counter my_counter = {0};
    counter_increment(&my_counter);
    printf("%d\n", counter_get(&my_counter)); // Wypisuje: 1
    return 0;
}

Konwencja nazewnictwa typename_action (na przykład counter_increment) pomaga uporządkować kod i jasno wskazuje, do której struktury należy funkcja. Ten wzorzec stanowi podstawę programowania obiektowego w C.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty moduł Counter, który traktuje strukturę jak obiekt z zachowaniem. Rozmieścisz swój kod w trzech plikach, aby przećwiczyć wzorzec łączenia danych z funkcjami, które na nich operują.

Utworzysz trzy pliki:

  • counter.h: Plik nagłówkowy deklarujący strukturę Counter z jednym polem int value. Zadeklaruj też dwie funkcje, które pełnią rolę „metod” licznika: counter_increment (przyjmuje wskaźnik do Counter i zwiększa jego wartość o 1) oraz counter_get (przyjmuje wskaźnik do Counter i zwraca jego bieżącą wartość). Użyj strażników dołączania z symbolem COUNTER_H.
  • counter.c: Plik źródłowy implementujący obie funkcje. Pamiętaj, aby dołączyć plik nagłówkowy.
  • main.c: Główny plik, który tworzy obiekt Counter, wykonuje na nim operacje i wyświetla wyniki.

Otrzymasz dwie liczby całkowite: wartość początkową licznika oraz liczbę razy, o jaką należy go zwiększyć.

W pliku głównym zainicjuj obiekt Counter wartością początkową, a następnie wywołaj counter_increment podaną liczbę razy. Na koniec użyj counter_get, aby pobrać i wyświetlić wartość końcową.

Wyświetl wynik w tym formacie:

Final value: {result}

Na przykład, dla wartości początkowej 5 i 3 zwiększeń wynik będzie następujący:

Final value: 8

Spróbuj swoich sił

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

int main() {
    // Wczytaj dane wejściowe
    int starting_value;
    int num_increments;
    scanf("%d", &starting_value);
    scanf("%d", &num_increments);
    
    // TODO: Utwórz Counter i zainicjalizuj go wartością starting_value
    
    // TODO: Wywołaj counter_increment określoną liczbę razy
    
    // TODO: Użyj counter_get, aby pobrać wartość końcową i ją wypisać
    // Format wypisywania: "Final value: {result}"
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online