§ 22. Тип данных класс (class)

22.1. Понятие класса

Язык программирования C++ предоставляет большое количество различных типов и структур данных (например: char, int, double, vector, list и т. д.), которых достаточно для решения относительно простых задач. Однако для решения более сложных проблем функционала этих типов может не хватать.

В С++ есть возможность определять собственные типы данных, которые будут применяться для решения конкретной задачи. Вы уже создавали структуры, которые могут использоваться для создания собственных пользовательских типов данных.

Структуры — это традиционный способ представления сложных типов данных, характерный для парадигмы структурного программирования.

В объектно-ориентированном программировании[1] типы данных могут содержать не только данные, но и функции, которые могут работать с этими данными. Таким типом данных является класс.


[1] С принципами объектно-ориентированного программирования вы познакомитесь в 11-м классе.  

В языке C структуры могут только хранить данные и не могут иметь методов для их обработки. В C++, после проектирования классов (используя ключевое слово class), Бьёрн Страуструп размышлял о том, нужно ли, чтобы структуры (которые были унаследованы из языка С) имели связанные функции-члены. После некоторых размышлений он решил, что нужно. Поэтому сегодня структуры и классы в С++ имеют больше сходства, чем различий.

Многие разработчики считают, что такое решение не было правильным, поскольку оно может привести к реальным проблемам (например, с выделением и очисткой памяти). Поэтому рекомендуется использовать ключевое слово struct для структур, применяемых только для хранения данных, и ключевое слово class для описания объектов, которые требуют объединения данных, и методов их обработки.