Классы определяются как набор определений в ``{}``. Поля по умолчанию являются закрытыми, остальные элементы открытыми. Для изменения доступа перед элементом нужно указать ``public`` (открытый), ``private`` (закрытый), ``protected`` (защищенный). Методы класса определяются как функции с параметром ``this``.
Конструкторы определяются как метод ``operator=`` с параметром ``out this``, в котором нужно указать присваивания полям в порядке объявления. Это определение используется также для определения присваивания, перемещающего конструктора и перемещающего присваивания. Их можно определить явно, указав тип передачи аргумента ``inout`` для ``this`` и ``move`` для ``that``. Для неявного конструктора-преобразователя у ``this`` нужно указать ``implicit``.
Деструктор определяется как метод ``operator= :(move this)``.
Для наследования среди элементов класса нужно указать this с указанием базового класса. Для переопределения методов нужно указать ``virtual`` у ``this`` в базовом классе и ``override`` в производном.