Klasy i obiekty w C++

Język C++ wykorzystuje paradygmat programowania obiektowego (OOP), w którym klasy i obiekty odgrywają kluczową rolę. Klasy definiują strukturę danych i zachowania, podczas gdy obiekty są instancjami tych klas, reprezentującymi konkretne egzemplarze zdefiniowanych struktur i zachowań.
Klasy
Klasa w C++ jest szablonem lub „planem” do tworzenia obiektów. Definiuje ona, jakie dane (atrybuty) i operacje (metody) na tych danych będą dostępne dla obiektów danej klasy.
Deklaracja Klasy
Deklaracja klasy rozpoczyna się od słowa kluczowego class, po którym następuje nazwa klasy i ciało klasy zawarte w nawiasach klamrowych {}. Na przykład:
class Pracownik {
public:
    string imie;
    string nazwisko;
    int rokZatrudnienia;

    void wyswietlInformacje() {
        cout << "Pracownik: " << imie << " " << nazwisko << ", Rok zatrudnienia: " << rokZatrudnienia << endl;
    }
};
Obiekty
Obiekt jest konkretną instancją klasy, zawierającą rzeczywiste wartości dla atrybutów i możliwość wywoływania zdefiniowanych metod.
Tworzenie Obiektu
Obiekt klasy tworzy się, deklarując zmienną danego typu klasy. Na przykład:
Pracownik pracownik1;
Następnie można zainicjalizować atrybuty obiektu i wywołać jego metody:
pracownik1.imie = "Jan";
pracownik1.nazwisko = "Kowalski";
pracownik1.rokZatrudnienia = 2021;

pracownik1.wyswietlInformacje();
Atrybuty
Atrybuty (czasami nazywane polami lub właściwościami) to zmienne zdefiniowane wewnątrz klasy. Określają one stan obiektu. W powyższym przykładzie, imie, nazwisko, i rokZatrudnienia są atrybutami klasy Pracownik.
Metody
Metody (często nazywane funkcjami członkowskimi) to funkcje zdefiniowane wewnątrz klasy, które operują na obiektach tej klasy lub wykonują działania związane z obiektami. W przykładzie, wyswietlInformacje jest metodą klasy Pracownik, która wyświetla informacje o pracowniku.
Dostęp do Składowych Klasy
W C++, dostęp do składowych klasy (czyli do jej pól i metod) jest kontrolowany przez modyfikatory dostępu. Modyfikatory dostępu określają, z jakich części programu można korzystać z danych składowych. Istnieją trzy główne modyfikatory dostępu:
  1. public: Składowe oznaczone jako publiczne są dostępne z dowolnego miejsca w programie. Oznacza to, że można do nich uzyskać dostęp zarówno z wnętrza klasy, jak i z zewnątrz.
  2. protected: Składowe chronione są dostępne wewnątrz klasy, w klasach pochodnych (dziedziczących) oraz w przyjaznych klasach, ale nie są dostępne bezpośrednio z zewnętrznego kodu.
  3. private: Prywatne składowe są dostępne tylko wewnątrz klasy, która je zdefiniowała. Nie są dostępne z poziomu obiektów klasy ani w klasach pochodnych.

Dostęp do Składowych Klasy

Dostęp do składowych klasy zależy od modyfikatora dostępu, który przed nimi występuje. Oto przykład ilustrujący różnice między modyfikatorami dostępu:
class PrzykladowaKlasa {
public:
    int publicznaZmienna; // dostępna z każdego miejsca w programie

protected:
    int chronionaZmienna; // dostępna w tej klasie, w klasach pochodnych oraz w przyjaznych klasach

private:
    int prywatnaZmienna; // dostępna tylko wewnątrz tej klasy

public:
    void ustawPrywatna(int wartosc) {
        prywatnaZmienna = wartosc; // metoda publiczna ma dostęp do składowych prywatnych
    }

    int pobierzPrywatna() {
        return prywatnaZmienna; // metoda publiczna może zwracać wartości prywatne
    }
};

int main() {
    PrzykladowaKlasa obiekt;
    obiekt.publicznaZmienna = 10; // Dostęp do publicznej zmiennej z zewnątrz klasy
    // obiekt.chronionaZmienna = 20; // Błąd: składowa chroniona nie jest dostępna z zewnątrz
    // obiekt.prywatnaZmienna = 30; // Błąd: składowa prywatna nie jest dostępna z zewnątrz

    obiekt.ustawPrywatna(30); // Ustawienie prywatnej zmiennej za pomocą metody publicznej
    int wartosc = obiekt.pobierzPrywatna(); // Pobranie wartości prywatnej zmiennej
}

Dostęp do Składowych za Pomocą Metod

Jednym ze sposobów na bezpieczne udostępnianie i modyfikowanie prywatnych danych jest użycie publicznych metod. Metody takie jak ustawPrywatna i pobierzPrywatna w powyższym przykładzie umożliwiają kontrolowany dostęp do prywatnych składowych klasy.

Podsumowanie

  • Modyfikatory dostępu kontrolują, skąd można uzyskać dostęp do składowych klasy.
  • Publiczne składowe są dostępne z każdego miejsca w programie.
  • Chronione składowe są ograniczone do klasy, jej pochodnych i przyjaznych klas.
  • Prywatne składowe są dostępne tylko wewnątrz klasy, co zapewnia enkapsulację i ochronę danych.