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.
class Nazwa_klasy {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:
public:
deklaracje składowych publiczne
private:
deklaracje składowych prywatne
};
Przykład:
class A {
public:
int a;
void f();
private:
int b;
int g(int x);
};
void A::f() { ... }
int A::g(int x) { ... }
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 {To który konstruktor zostanie wywołany zależy od sposobu utworzenia obiektu. Np.
public:
A();
A(int n);
A(char* s, bool b);
...
};
A::A() { ... }
A::A(int n) { ... }
A::A(char* s, bool b) { ... }
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:
A(parametry):
zmienna_1(wartość_1),
zmienna_2(wartość_2),
...
zmienna_n(wartość_n) {
...
}
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.