306.40K
Категория: ПрограммированиеПрограммирование

Композиция объектов

1.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
6
Тема: Композиция объектов.
Создание новых классов в отдельных файлах является хорошим тоном, так
как это делает код более удобочитаемым и его легче поддерживать в
дальнейшем. Возьмём за правило- для классов создавать 2 файла:
*.h *.cpp
* - название класса.
*.h – заголовочный файл, содержащий в себе объявления функций (их прототипы)
и объявления переменных (полей класса).
*.cpp – исходный файл, который предоставляет реализацию методов, описанных
(прототипами) в *.h файле.

2.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Два двоеточия – оператор
доступа к области видимости
(используется для определения
методов класса, которые уже
были объявлены в
пространстве имён класса в
заголовочном файле)
4

3.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Для создания объекта класса, объявленного в заголовочном файле (.h),
достаточно подключить в текущий файл заголовочный файл класса.
5

4.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Деструктор
Помимо конструкторов, также в классе объявляется и деструктор. Как и
конструктор, деструктор является специальной функцией/методом. Он
вызывается при уничтожении или удалении объекта класса. Таким образом,
«жизненный цикл» объекта класса выглядит следующим образом:
1. Создание объекта (вызов конструктора)
2. Работа с объектом (вызов его методов и т д)
3. Уничтожение объекта (вызов деструктора)
В отличие от конструктора (которых может быть сколь угодно много),
деструктор только один. Он не принимает никаких аргументов и ничего не
возвращает.
Объекты класса уничтожаются при выходе за пределы видимости вызова
конструктора (например, тело функции main), или при применении
выражения delete к указателю, направленному на объект класса.
6

5.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Имя у деструктора такое же, как и у класса, только с префиксом тильда (~).
7

6.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Список инициализации
C++ предоставляет удобный синтаксис для
инициализации элементов класса, который
называется списком инициализаторов (также
называется инициализацией полей в конструкторе).
Этот класс имеет две переменные, Var и constVar. У
него также есть конструктор, который принимает
два параметра, которые используются для
инициализации переменных-членов.
Запуск этого кода возвращает ошибку, потому что
одна из его переменных-членов является
константой, к которой не может быть присвоено
значение после объявления. В таких случаях, список
инициализаторов может быть использован для
присваивания значений переменным-членам.
8

7.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
В этом синтаксисе список инициализации
следует за параметрами конструктора.
Список начинается с двоеточия (:), а затем
следуют разделенные запятыми
инициализируемые переменные вместе со
значениями.
Cинтаксис - переменная(значение) для
присваивания значений.
Список инициализации элементов может
быть использован для регулярных
переменных и должен быть использован для
константных переменных.
9

8.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
10
Тема: Композиция объектов.
Пример композиции объектов
В реальном мире, сложные объекты обычно
состоят из маленьких, более простых
объектов. Например, машина собрана с
использованием металлической рамы,
двигателя, колес и огромного количества
других деталей. Этот процесс называется
композицией.
В C++ объектная композиция подразумевает
использование классов в качестве
переменных-членов в других классах

9.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Дружественные функции
Обычно, скрытые поля класса недоступны извне
класса. Однако, если объявление функции как нечлен класса с использованием ключевого слова
friend позволяет получить доступ к скрытым полям
класса. Это выполняется путем включения
объявления этой внешней функции внутри класса, с
предшествующим ключевым словом friend.
someFunc(), которая не является функциейэлементом класса, является дружественной
функцией класса MyClass и имеет доступ к его
скрытым полям.
Чтобы сделать элементы доступными, в классе в
определении должна быть объявлена функция с
использованием ключевого слова friend. Вы не
можете "сделать" функцию дружественной для
класса без "согласия" класса.
11

10.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Что если названия скрытых полей класса
совпадут с аргументами,
передаваемыми в конструктор?
This
Каждый объект в C++ имеет доступ к его
собственному адресу через указатель,
который называется this.
Внутри функции-члена this может быть
использовано для ссылки на
вызывающий объект.
Дружественные функции не имеют
указателя this, потому что
дружественные функции не являются
элементами класса.
12

11.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Перегрузка Операторов
Большинство операторов в C++ могут быть переопределены или перегружены.
Таким образом, операторы могут быть использованы также с определенными
пользователем типами (например, позволяют вам складывать два объекта
вместе).
В данной таблице указаны операторы, которые могут быть перегружены.
13

12.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Перегруженные операторы - это функции, определенные с
помощью ключевого слова operator, за которым следует
символ определяемого оператора.
Перегруженный оператор схож с другими функциями в том,
что он тоже имеет возвращаемый тип и список параметров.
В нашем примере мы будем перегружать оператор +. Он
будет возвращать объект нашего класса и принимать объект
нашего класса в качестве параметра.
operator+
14

13.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
15

14.

Программирование
на C++
Практическая часть
Композиция объектов.
9 занятие

15.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Композиция объектов.
Задание 1
Определить класс Human, который содержит такие поля (члены класса):
имя, фамилию и возраст, публичные – методы ввода данных и
отображения их на экран. Определить класс Student, который содержит
такие поля (члены класса): имя, фамилию, возраст, класс, номер школы и
средний балл. Публичные – методы ввода данных и отображения их на
экран. Объявить два объекта класса, внести данные и показать их.
*
Сделать конструктор по умолчанию и конструктор с помощью
инициализатора
17

16.

КОМПОЗИЦИЯ ОБЪЕКТОВ.
Тема: Объектно-ориентированное программирование.
Классы в С++.
Задание 2
Определить класс fraction, который содержит такие поля (члены класса):
закрытые – числитель и знаменатель, публичные – конструктор по
умолчанию, конструктор, методы ввода данных (принимается числитель и
знаменатель отдельно) и отображение дроби на экран в обычном виде и
десятичном
*
Упрощение дробей (на этапе создания объекта)
Пример.
(25/100 –> 1/4)
18
English     Русский Правила