Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AllCandC++Lectures.docx
Скачиваний:
2
Добавлен:
25.09.2019
Размер:
52.56 Кб
Скачать

Наследование

Классы абстрагируют свойства некоторых множеств объектов. Уровень абстракции может быть разный, поэтому часто применяются иерархии классов. Каждый уровень иерархии соответствует определенному уровню абстракции. Например: млекопитающее - люди - мужчины, женщины. Понятие млекопитающее наивысший уровень абстракции. Люди это частный случай млекопитающих. Все люди млекопитающие, но класс людей обладает уточняющими свойствами, например, люди способны мыслить. Классы мужчин и женщин еще больше уточняют свойства. Все мужчина и женщины являются и людьми и млекопитающими одновременно. Наследование в программировании является мощным инструментом, например для повторного использования кода.

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

Расширение понятия структура

Структуры в языке СИ это попытка создать механизм для разработки новых типов данных. Однако этот механизм неполноценный и имеет ряд недостатков. Понятие класса в СИ++ является развитием понятие структуры языка СИ. Это развитие включает несколько элементов: 1)объединения данных и функций.

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

Ссылки

В си для передачи аргументов в функцию используется только 1 метод. Чтобы избежать больших накладок, нужно использовать указатели, однако это усложняет синтаксис, так как дальше приходится пользоваться стрелочками. В СИ++ реализована 2я возможность - передача аргументов по ссылке. То есть в функцию передается не копия, а сам объект. Реализация этого метода основана на создании синонимов для имен объектов.

1) Использование ссылок вне функции. Ссылки могут применяться при работе с обычными переменными. Для того чтобы указать, что идентификатор является ссылкой необходимо в его определении перед именем записать &. Ссылка сама по себе не имеет смысла, поэтому она должна быть сразу инициализирована. Ссылка определяется так: int i(переменная); &ri=i;(определение ссылки на i; Тип ссылки и инициализатора должен быть одинаковым. Нельзя создать указатель на ссылку, но можно создать ссылку на указатель: int k; *&k=&k;

Нельзя создавать массив из ссылок. Нельзя создать ссылку на void, но можно создать ссылку на указатель на void.

Использование ссылок в аргументах функции

Если мы хотим, чтобы аргумент функции передавался по ссылке, то в определении функции его нужно обозначить как ссылку. Когда в программе встречается вызов f(x), то компилятор сопоставляет этот вызов с определением функции. Когда функция вызывается с аргументов переменной - все понятно. Но нам никто не запрещает вызывать эту функцию, передавая ей конкретный значения, например f(2). Ссылки создаются только для переменных, но не для констант. Чтобы решить эту проблему используется искусственный прием. Для того чтобы обеспечить вызов функции, компилятор на основе значения фактического параметра создает временную переменную. Компилятор может вывести предупреждение. Временная переменная удаляется при выходе из функции. Поэтому выполнение функции никак не отобразится на остальных частях программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]