Klasy

Klasy to złożone typy danych definiowane przez programistę. Zmienne typu klasowego nazywa się obiektami. Obiekt może zawierać wiele składników - zmiennych (pól) oraz funkcji (metod). Składniki klasy dzielą się na dwie grupy: publiczne, tj. takie, których można używać poza definicją klasy, oraz prywatne, których celem jest zapewnienie właściwego działania obiektu.

Definicja klasy

Definicja klasy ma postać
class Nazwa_klasy {
public:
   deklaracje składowych publiczne
private:
   deklaracje składowych prywatne
};
Deklaracje składowych to lista deklaracji zmiennych i funkcji. Definicje funkcji mogą się znajdować bezpośrednio po deklaracjach, zazwyczaj umiesczza się tam tylko definicje krótkich funkcji. Definicje pozostałych metod umieszcza się poniżej definicji klasy, tak jak na poniższym przykładzie:

Przykład:

class A {
public:
   int a;
   void f();
private:
   int b;
   int g(int x);
};
void A::f() { ... }
int A::g(int x) { ... }

Użycie klas

Obiekty (tzn. zmienne typu klasowego) tworzymy tak jak zwykłe zmienne, np. obiekt klasy A zdefiniowanej powyżej tworzymy przez
A x;
czasem niezbędne będzie podanie parametrów w nawiasach - patrz rozdział poniżej. Dostęp do składowych uzyskujemy przez użycie kropki, np.
x.a=7;
powoduje ustawienie pola a w zmiennej x na 7, a
x.f();
powoduje wywołanie funkcji f dla obiektu x. Metody mają jeden ukryty parametr - obiekt, dla którego wywoływana jest funkcja.

Konstruktory i destruktory

Każda klasa może zawierać jeden lub więcej konstruktorów. Konstruktor jest funkcją wywoływaną automatycznie podczas tworzenia nowego obiektu. Zazwyczaj jest on używany do ustawienia początkowych wartości pól obiektu. Nazwa konstruktora jest taka sama jak nazwa klasy i nie zwraca on żadnej wartości (nie należy też żadnej zwracanej wartości deklarować). Oto przykład definicji klasy zawierającej konstruktory:

class A {
public:
   A();
   A(int n);
   A(char* s, bool b);
...
};
A::A() { ... }
A::A(int n) { ... }
A::A(char* s, bool b) { ... }
To który konstruktor zostanie wywołany zależy od sposobu utworzenia obiektu. Np.
A a(7);
spowoduje wywołanie drugiego konstruktora, a
A* w = new A("Anna", true);
wywoła trzeci konstruktor. W przypadku, gdy nie zadeklarowaliśmy żadnego konstruktora, automatycznie stworzony zostanie konstruktor bez parametrów o pustej treści.

Uwagi:

Destruktor jest metodą wywoływaną automatycznie w trakcie kasowania obiektu. Zazwyczaj jest on używany do zwalniania pamięci zarezerwowanej przez obiekt. Destruktor dla klasy A ma nazwę ~A i podobnie jak konstruktory nie zwraca żadnej wartości.