функции – члены класса
1. Понятие класса
Целью введения концепции классов в C++ является предоставление программисту средств создания новых типов, которые настолько же удобны в использовании, как и встроенные. Кроме того, производные классы и шаблоны представляют способы организации классов, имеющих между собой нечто общее.
Тип является конкретным представлением некоторой концепции. Например, встроенный тип float вместе с операциями +, –, * и т.д. представляет конкретное воплощение математической концепции вещественного числа.
Класс – это определённый пользователем тип. Объявление класса задаёт представление объектов этого класса и набор операций, которые можно применять к таким объектам. Класс обеспечивает абстракцию данных, он скрывает детали представления объекта и предоставляет доступ к содержащимся в нём данным только посредством функций и операций, описанных как часть этого класса.
Основной смысл введения новых типов состоит в разделении малозначащих деталей реализации (например, расположения в памяти составных частей объектов данного типа) от свойств, имеющих определяющее значение для правильного использования сущности (например, полный набор функций доступа к данным). Подобное разделение лучше всего выражается в терминах ограничения доступа к данным извне и использования для этой цели специальных процедур в рамках четко определённого интерфейса.
Тщательно подобранный набор типов, определяемых пользователем, делает программу более краткой и выразительной. Кроме того, такие типы дают возможность проведения разнообразного анализа кода. В частности, они позволяют компилятору обнаружить случаи недопустимого использования объектов, которые иначе не были бы выявлены вплоть до этапа тестирования.
Функции-члены класса
Функция, объявленная в классе без спецификатора friend
, называется функцией-членом класса. Её вызов имеет соответствующий синтаксис.
Описание функции-члена класса относиться к области действия класса. Это означает, что функция-член класса может непосредственно использовать имена членов своего класса.
class X
{ private: int n; public: void f(); }; |
// Объявление класса Х |
void X::f()
{ n++; } |
// Определение функции f из класса Х |
X a, b; | // Объявление переменных класса Х |
a.f(); | // Вызов функции f применяется к переменной а. Таким образом,
// изменяется член n переменной a. Переменная b остаётся без изменений. |