- •Лабораторная работа
- •Перегрузка функций
- •Значения аргументов функций, принимаемые по умолчанию
- •Константные поля
- •Изучение порядка вызова конструкторов и деструкторов
- •В) в классе определен деструктор, в котором предусмотрен только вывод сообщения
- •Изучение порядка вызова конструкторов и деструкторов (класс содержит поля данных, являющиеся объектами других классов)
- •Вопросы для контроля
Рубанчик В.Б. |
Лабораторная работа "Конструкторы и деструкторы" |
|
Лабораторная работа
Тема: Конструкторы и деструкторы
Цель работы: Исследование работы конструкторов и деструкторов. Изучение специального синтаксиса для инициализации константных и объектных полей
Отчет: Тексты программ с необходимыми комментариями, контрольный пример и результаты выполнения программ.
В C++ классы могут определяться с помощью двух служебных слов — struct (для совместимости с Си), и class (более строго соответствует принципам ОПП, обычно именно это понимают под классами). Классы в С++ прежде всего нужно рассматривать как типы данных, определяемые программистом, и удобные для решения прикладных задач из некоторой предметной области. Поэтому определения классов обычно выносят в отдельные подключаемые файлы. Хотя обычные структуры Си и классы могут быть определены в теле функции, как типы данных они имеют общее назначение, и поэтому из практических соображений должны определяться на глобальном уровне.
Правило, которого нужно придерживаться в большинстве случаев: данные нужно "прятать" от прямого доступа в разделы private, а функции (методы), кроме вспомогательных, помещать в разделы public. Тогда изменять значения членов-данных класса будет возможно только в результате вызова методов. Это помогает обеспечить инкапсуляцию.
Консольный вывод в С++
В С++ вывод на экран (консоль, стандартное устройство вывода) выполняется с помощью новой синтаксической конструкции: cout<<…<<…;
Операция <<, называемая "вставкой в поток", обеспечивает форматный вывод для всех базовых типов в приемлемом для отладочных целей виде (при необходимости можно управлять форматированием).
Помимо переменных и выражений в поток можно вставлять дополнительные манипуляторы. Например, манипулятор endl обеспечивает перевод строки, а манипулятор ends — вывод пробела.
Перегрузка функций
В С++ может быть определено несколько функций с одним и тем же именем, но с разными наборами аргументов (сигнатурами). Эти функции называют перегружаемыми (overloaded).
Встречая вызов такой функции, компилятор отыскивает вариант ее определения, у которого сигнатура соответствует набору фактических параметров вызова.
Если он находит более одного подходящего варианта, то разрешить конфликт не может и возникает ошибка (ambiguity — неоднозначность, неопределенность).
Примером перегружаемых функций в определении класса является несколько конструкторов с разными наборами аргументов.
Значения аргументов функций, принимаемые по умолчанию
Если при вызовах функции какой-то аргумент часто принимает одно и то же значение, то это значение можно назначить аргументу как принимаемое по умолчанию. Это дает возможность в стандартных случаях соответствующий фактический параметр в вызове функции не указывать.
void f(double x i, int k=0){…}
Значения по умолчанию могут иметь только последние в списке аргументы. Поэтому в приведенном примере поменять местами аргументы нельзя, а функцию f можно вызывать с одним (соответствующим x) или двумя (x и k) фактическими параметрами.
Наличие аргументов по умолчанию у перегружаемых функций иногда может быть источником конфликтов.