C++ jest językiem obiektowym, a więc oczywiście umożliwia definiowanie nowych typów danych bogatszych niż proste C-struktury, które zawierały wyłącznie dane, bez opisu operacji, jakie na tych danych można wykonywać — operacje takie trzeba w C definiować za pomocą globalnych funkcji.
Klasa jest uogólnieniem typu: w zasadzie dobrze zdefiniowana (tzw. pierwszorzędowa) klasa zachowuje się dokładnie jak typ wbudowany (nie jest tak w Javie). Aby ta analogia była pełna, projektanci C++ zadbali nawet o to, żeby „prawdziwe” typy wbudowane mogły być używane zgodnie ze składnią właściwą dla klas definiowanych przez użytkownika; tak na przykład, dopuszczalne jest definiowanie wraz z inicjalizacją zmiennych typów wbudowanych, jak int albo double, poprzez wywołanie „konstruktora”:
int k(5);albo
double *p = new double(6.5);Tak naprawdę żadnego konstruktora nie ma, bo int i double są typami wbudowanymi, ale składnia jest taka, jakby tworzone zmienne były obiektami klasy.
Składnikami klasy są w zasadzie pola i funkcje, zwane razem składowymi klasy. Ale klasa stanowi też osobną przestrzeń nazw: wewnątrz klasy można definiować nowe typy, jak i nowe aliasy dla nazw typów za pomocą instrukcji typedef. Nazwy tak zdefiniowanych typów czy aliasów należeć będą do zasięgu klasy: można się do nich odwołać z zewnątrz poprzez nazwę kwalifikowaną z zastosowaniem operatora zasięgu ' ::'.
Definicję klasy piszemy zwykle na zewnątrz innych klas i funkcji (nie jest to jednak wymaganie języka: można, choć rzadko bywa to przydatne, definiować klasę wewnątrz funkcji).
Sama definicja ma postać
class Klasa { // ... pola, metody... };lub
struct Klasa { // ... pola, metody... };Nie należy zapominać o średniku kończącym definicję klasy! Nowy typ jest już zdefiniowany po napotkaniu zamykającego nawiasu klamrowego, zatem za nawiasem, a przed średnikiem można umieścić definicje obiektów właśnie zdefiniowanej klasy; na przykład po
struct Klasa { // ... } x, y, z;zdefiniowana byłaby klasa Klasa i utworzone trzy obiekty tej klasy o nazwach x, y i z (pod warunkiem, że istnieje w klasie/strukturze publiczny konstruktor domyślny, co za chwilę omówimy bardziej szczegółowo).
T.R. Werner, 21 lutego 2016; 20:17