Klasy

To typy, które zawierają dwa rodzaje składników: pola (zmienne) oraz metody (funkcje). Deklaracja klasy jest następująca:

class nazwa_klasy {
   lista_pól_i_metod
};
gdzie lista_pól_i_metod może zawierać następujące elementy:
  1. deklaracje pól - takie same jak deklaracje zmiennych, z tą róznicą, że nie można ich inicjalizować (podawać początkowych wartości)
  2. deklaracje metod - takie same jak deklaracje funkcji. Dozwolone jest również umieszczanie całych definicji metod (jest to zalecane tylko w przypadku bardzo prostych funkcji). Jeśli definicja metody nie znajduje się w ciele klasy, powinna się znajdować później.
  3. modyfikatory dostępu - są to słowa public:, protected: i private:, które powodują, że następujące po nich składniki są dostępne wszędzie (public:), tylko w klasach pochodnych (protected:) albo tylko w obrębie danej klasy (private:).

Uwaga: Jedyna różnica pomiędzy klasami a strukturami polega na tym, że składniki klas domyślnie są prywatne, a składniki struktur publiczne.

Przykład:

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

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.