Добавил:
Помощь с лабораторными, контрольными практическими и курсовыми работами по: - Инженерной и компьютерной графике - Прикладной механике Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 сем 1 курс С++ / Экзамен / Экзамен_Информационные технологии

.doc
Скачиваний:
1
Добавлен:
08.08.2022
Размер:
41.98 Кб
Скачать

Дружественные функции. Дружественные классы.

Функция – не член класса, получившая право доступа к закрытой части класса, называется дружественной функцией. Функция становится дружественной после описания при помощи ключевого слова friend. Имя друга класса не лежит в области действия этого класса, и друг класса не вызывается при помощи операции доступа к члену класса.

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

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

Дружественные классы.

Функция–член одного класса может быть другом другого класса.

Пример:

class X                                     

{

void f ();                   // Функция-член класса Х

};

class Y{

.

friend void x :: f ();   // Дружественная классу Y

};

Все функции–члены одного класса могут являться друзьями другого класса.

class X {…};

class Y {

.

friend class X;

.

};

Дружественные классы используются не очень часто – существуют более эффективные способы реали- зации доступа методов одного класса к членам другого, главным среди которых является механизм наследования.

Структуры, объединения и классы. Статические элементы класса.

Тип структуры — это пользовательский составной тип. Он состоит из полей или членов, которые могут иметь разные типы.

В C++ структура является такой же, как и класс, за исключением того, что ее члены по public умолчанию имеют значение.

В C++ не нужно использовать struct ключевое слово после определения типа.

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

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

Объединение – это такой формат данных, который способен хранить в пределах одной зарезервированной области памяти различные типы данных. Но в каждый определенный момент времени в объединении хранится только один из этих типов данных и возможно использовать лишь значение этого элемента.

К данным, которые хранят элементы структуры (например short, int, long) мы можем обращаться в любой момент (хоть к одному, хоть и ко всем сразу). А в объединении могут храниться данные либо  short, либо int, либо long.

Элементы объединения располагаются в памяти начиная с одного места  (как бы накладываются друг на друга), в отличии от элементов структуры (они располагаются в памяти последовательно один за другим).

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

Класс – это новый тип данных с доступом к данным, разрешённым только определённому множеству функций. Класс, как и структура, представляет собой набор данных (полей) и методов (функций), предназначенных для совместного выполнения определённой задачи.

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

Характерные элементы класса:

1. средства контроля доступа;

2. конструкторы;

3. деструкторы;

4. элементы–данные;

5. функции–члены;

6. специально скрытый указатель this.

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

***

Члены класса могут использоваться с ключевым словом static.

Когда член класса объявляется как статический, то тем самым компилятору дается указание, что должна существовать только одна копия этого члена, сколько бы объектов этого класса ни создавалось. Статический член используется совместно все­ми объектами данного класса. Все статические данные инициализируются нулями при создании первого объекта, и другая инициализация не предусмотрена.

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

Также можно иметь статические функции-члены. Статические функции-члены не могут прямо ссылаться на нестатические данные или нестатические функции, объявленные в их классе. Причи­ной тому является отсутствие для них указателя this, так что нет способа узнать, с какими именно нестатическими данными работать.

Статические функции не могут быть виртуальными или объявляться с модификаторами const иди volatile. Статическая функция может вызываться либо с использованием объекта класса, либо с использованием имени класса и оператора области видимости. Тем не менее не надо забы­вать, что даже при вызове статической функции с использованием объекта, ей не передается указатель this.

Соседние файлы в папке Экзамен