Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Późniejsze modyfikacje: 'Dante'
Kurs C++

Klasy (obiekty)

[lekcja] Podstawowe informacje o klasach.

Zanim wejdziesz w nowy wymiar

Zanim podejmiesz się nauki programowania obiektowego, musisz uświadomić sobie kilka bardzo ważnych rzeczy, które nadadzą Ci kierunek dalszej nauki C++.

Oceń swoje obecne umiejętności posługiwania się C++

Wszystko co do tej pory zostało omówione, stanowi wiedzę podstawową. Jeśli umiesz biegle posługiwać się wszystkimi zagadnieniami jakie zostały do tej pory omówione, warto zacząć pogłębiać tajniki C++, ucząc się programowania obiektowego.

Jakie są zalety programowania obiektowego

W bardzo dużym uogólnieniu programowanie obiektowe umożliwia organizowanie kodu źródłowego w sposób bardziej przyjazny dla programisty. Jest to podstawowa własność programowania obiektowego, która generalnie sprowadza się do tego, aby zamknąć coś w 'pudełko' i posługiwać się pudełkiem, a nie porozrzucanymi częściami (funkcjami i zmiennymi) naszego programu.

Kiedy będziesz wiedział, że jesteś gotowy zacząć się uczyć programowania obiektowego

Jeśli potrafisz wymyślić program, który coś będzie robił i jeśli ten program będzie wykorzystywał napisane przez Ciebie funkcje i stwierdzisz, że trochę niedopracowana jest organizacja kodu w C++, to będzie to najwyższa pora na to, żeby zacząć się uczyć programowania obiektowego.

Jak zbudowana jest klasa w C++

Klasa w bardzo dużym uogólnieniu przypomina definicję struktury. Jej zapis wygląda następująco:
C/C++
class NazwaTwojejKlasy
{
    //w tym miejscu piszemy definicje typów, zmienne  i funkcje jakie mają należeć do klasy.
}; //tutaj średnik jest bardzo ważny!

Jak się korzysta z klasy

Klasy wykorzystuje się w praktyce tak samo jak struktury. Przykład:
C/C++
class TwojaKlasa
{
};

int main()
{
    TwojaKlasa nazwaZmiennej;
    return( 0 );
}

Prawa dostępu do klasy

Jeśli klasy deklaruje się tak samo jak struktury i jeśli wykorzystuje się tak samo jak struktury, możesz zacząć się zastanawiać czym tak naprawdę różni się klasa od struktury. Jeśli napiszemy następujący program:
C/C++
class TwojaKlasa
{
    int abc;
};

int main()
{
    TwojaKlasa nazwaZmiennej;
    nazwaZmiennej.abc = 10;
    return( 0 );
}
i spróbujemy go skompilować, otrzymamy następujący błąd kompilacji:

In function `int main()':
`int TwojaKlasa::abc' is private
within this context
Domyślnie dostęp do wszystkich elementów klasy jest ustawiony na prywatny. Dostęp prywatny oznacza, że nie można wykorzystywać zmiennych i funkcji zadeklarowanych w klasie 'na zewnątrz', czyli poprzez użyty tutaj zapis: nazwaZmiennej.abc=10;. Ze strukturami takiego problemu nie było, ponieważ przyjmują one domyślnie prawa dostępu publiczne dla wszystkich zadeklarowanych zmiennych wewnątrz struktury.

Słowa kluczowe private, protected, public

C++ umożliwia łatwe modyfikowanie praw dostępu do wybranych zmiennych i funkcji klasy. Służą do tego trzy słowa kluczowe: private, protected i public.

Słowo kluczowe private

Słowo kluczowe private oznacza dostęp do zmiennych i funkcji tylko z poziomu klasy. Nie są one widoczne poza klasą, więc użytkownik klasy nie będzie mógł uzyskać dostępu do zmiennej (lub funkcji) spoza klasy.

Słowo kluczowe protected

Słowo kluczowe protected ma takie same własności co słowo kluczowe private. Różnice pojawiają się tylko wtedy, gdy przyjdzie nam dziedziczyć klasy. Jeśli będziemy dziedziczyli klasę A do klasy B to zmienne oznaczone jako private w klasie A będą niewidoczne dla klasy B. Jeśli zmienne (i funkcje) klasy A będą miały prawo dostępu protected to takie zmienne (i funkcje) będą widoczne dla klasy B.

Słowo kluczowe public

Dostęp publiczny umożliwia uzyskiwanie dostępu do dowolnej zmiennej i funkcji z dowolnego miejsca w kodzie (jeśli oczywiście zachowana jest logika programowania w C++).

Jak się zmienia prawa dostępu w praktyce

Ustawianie praw dostępu jest bardzo prostą czynnością. Najprościej będzie to pokazać na przykładzie.
C/C++
#include <string>
class TwojaKlasa
{
public:
    double liczba; //prawo dostępu: publiczne
    char tablica[ 20 ]; //prawo dostępu: publiczne
   
private:
    int abc; //prawo dostępu: prytatne
    char znak; //prawo dostępu: prytatne
    std::string napis; //prawo dostępu: prytatne
};

int main()
{
    TwojaKlasa nazwaZmiennej;
    return( 0 );
}

Czy to koniec nauki o klasach

Widząc, że ten rozdział dobiega do końca, możesz mieć nieodparte wrażenie, że nic sensownego z tego rozdziału się nie dowiedziałeś. Wiedza, która została tu przedstawiona może być w Twoim odczuciu zbędna, co więcej możesz twierdzić, że zupełnie Ci się coś takiego nie przyda.
Rozdział ten stanowi tylko wstęp do programowania obiektowego. Kolejne rozdziały będą koncentrowały się już na praktycznym wykorzystaniu klas i będą pokazywały prawdziwe możliwości programowania obiektowego. Teoria, która została tu przedstawiona będzie wykorzystywana w każdym kolejnym programie wykorzystującym klasy.
Poprzedni dokument Następny dokument
Dzielenie kodu na kilka plików źródłowych Funkcje w klasie, czyli metody