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