Программирование (Козлова) - страница 28

35. Классы

Предназначение понятия класса заключается в том, чтобы предоставить инструмент для образования новых типов, таких же удобных в обращении, как и встроенные типы. В идеальном случае новый тип способом применения не должен отличаться от встроенных типов, только способом создания.

Тип является конкретным представлением некоторой концепции. К примеру, включающийся в C++ тип float с его операциями +, —, * и т. д. обеспечивает ограниченную, но конкретную версию математического понятия действительного числа. Новый тип образуется для того, чтобы дать специальное и конкретное описание понятия, которому ничто прямо и очевидно среди встроенных типов не отвечает.

К примеру, в программе, работающей с телефоном, можно было бы создать тип trunkmodule (элемент линии), а в программе обработки текстов – тип listofpa-ragraphs (список параграфов). Обычно программу, в которой образуются типы, хорошо отвечающие понятиям приложения, понять легче, чем ту, в которой это не происходит. Хорошо выбранные типы, которые определяются авторами программы, делают программу более четкой и короткой. Это также дает возможность компилятору обнаруживать недопустимые применения объектов, которые в противном случае останутся ненайденными до тестирования программы.

В определении нового типа основной идеей является отделить несущественные подробности реализации (формат данных, которые применяются для хранения объекта типа) от качеств, существенных для его правильного использования. Подобное разделение можно описать так, что работа со структурой данных и внутренними административными подпрограммами производится через специальный интерфейс.

Класс представляет собой определяемый пользователем тип. Данный раздел знакомит с основными средствами определения класса, создания объекта класса, работы с такими объектами и, наконец, уничтожения таких объектов после использования.

Явной связи между функциями и типом данных не существует. Такую связь можно определить, описав функции как члены:

struct date {

int month, day, year;

void set(int, int, int); void get(int*, int*, int*); void next(); void print(); };

Функции, описанные данным способом, называются функциями-членами и могут вызываться только для специальной переменной некоторого типа с применением стандартного синтаксиса для доступа к членам структуры.

36. Перегрузка операций

Часто программы имеют дело с объектами, которые являются представлениями абстрактных понятий. К примеру, тип данных int в C++ вместе с операциями +, —, *, / и т. д. является реализацией математического понятия целых чисел. Подобные понятия чаще всего включают в себя множество операций, которые кратко, удобно и привычно описывают основные действия над объектами. Язык программирования может непосредственно поддерживать только очень малое количество таких понятий. Например, понятия, комплексная арифметика, матричная алгебра, логические сигналы и строки не имеют прямой поддержки в C++. Классы дают метод спецификации в C++ представления неэлементарных объектов с множеством действий, которые выполняются над данными объектами. Часто определение того, как работают операции на объекты классов, дает возможность обеспечить более удобную запись для манипуляции объектами классов, чем та, которую можно получить, применяя только основную функциональную запись.