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:
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:
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.
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.
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.