Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_CPP-1.doc
Скачиваний:
1
Добавлен:
02.09.2019
Размер:
83.46 Кб
Скачать

Рубанчик В.Б.

Лабораторная работа "Конструкторы и деструкторы"

5/5

Лабораторная работа

Тема: Конструкторы и деструкторы

Цель работы: Исследование работы конструкторов и деструкторов. Изучение специального синтаксиса для инициализации константных и объектных полей

Отчет: Тексты программ с необходимыми комментариями, контрольный пример и результаты выполнения программ.

В C++ классы могут определяться с помощью двух служебных слов — struct (для совместимости с Си), и class (более строго соответствует принципам ОПП, обычно именно это понимают под классами). Классы в С++ прежде всего нужно рассматривать как типы данных, определяемые программистом, и удобные для решения прикладных задач из некоторой предметной области. Поэтому определения классов обычно выносят в отдельные подключаемые файлы. Хотя обычные структуры Си и классы могут быть определены в теле функции, как типы данных они имеют общее назначение, и поэтому из практических соображений должны определяться на глобальном уровне.

Правило, которого нужно придерживаться в большинстве случаев: данные нужно "прятать" от прямого доступа в разделы private, а функции (методы), кроме вспомогательных, помещать в разделы public. Тогда изменять значения членов-данных класса будет возможно только в результате вызова методов. Это помогает обеспечить инкапсуляцию.

Консольный вывод в С++

В С++ вывод на экран (консоль, стандартное устройство вывода) выполняется с помощью новой синтаксической конструкции: cout<<…<<…;

Операция <<, называемая "вставкой в поток", обеспечивает форматный вывод для всех базовых типов в приемлемом для отладочных целей виде (при необходимости можно управлять форматированием).

Помимо переменных и выражений в поток можно вставлять дополнительные манипуляторы. Например, манипулятор endl обеспечивает перевод строки, а манипулятор ends — вывод пробела.

Перегрузка функций

В С++ может быть определено несколько функций с одним и тем же именем, но с разными наборами аргументов (сигнатурами). Эти функции называют перегружаемыми (overloaded).

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

Если он находит более одного подходящего варианта, то разрешить конфликт не может и возникает ошибка (ambiguity — неоднозначность, неопределенность).

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

Значения аргументов функций, принимаемые по умолчанию

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

void f(double x i, int k=0){…}

Значения по умолчанию могут иметь только последние в списке аргументы. Поэтому в приведенном примере поменять местами аргументы нельзя, а функцию f можно вызывать с одним (соответствующим x) или двумя (x и k) фактическими параметрами.

Наличие аргументов по умолчанию у перегружаемых функций иногда может быть источником конфликтов.

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