Информатика 1курс
Лаб.работа C6
Цель занятия:
0. Текущая учебная информация.
1. Типы данных: структура, класс
2. Конструктор, деструктор
3. Список инициализации
4. Дружественные функции
5. Перегрузка операций
Скопируйте каталог X-files\Students\Tasks\Informatika\Lab_C6 в свой каталогInform.
Ваш рабочий каталог: Z:\Inform\Lab_C6
===============================================================
0. Текущая учебная информация.
Обратите внимание на структурное оформление программ. Программы должны быть структурированы в стиле «MFC». Если у Вас возникают вопросы, посмотрите Лекции или обратитесь к преподавателю.
Не правильно структурированные программы будут отключены перед зачетом из сданных решений.
Необходимо исправить неправильно структурированные программы и снова отправить их на проверку.
===============================================================
Подготовка к решению задач Базового Экзамена:
Необходимо написать 2 решения задачи 3002: одно – на Фортране, другое на С. Используйте учебные материалы: файлы и задачи.
Задачи необходимо решить НА ЗАНЯТИИ !!!
Это задания на скорость.
Из Lab_C6 необходимо самостоятельно после занятия посмотреть учебные примеры: DC_1, DC_2, DC_3, DC_4
===============================================================
1) программа Dc_1.cpp
Типы данных rectangle , pole- представляют собой структуры.
В программе определены объекты: box, square, flag_pole.
Все элементы (поля) этих объектов являются открытыми для доступа.
Поэтому мы можем использовать их произвольно, как обычные переменные. Например, мы можем перемножать попарно любые поля объектов, образовав из них произведение, имеет оно смысл для данного объекта или нет.
Таким образом, для структур отсутствует контроль правильности использования данных.
2) программа Dc_2.cpp
В этом примере тип rectangle определяется не как структура а, как класс.
В классе вводятся ограничения на доступ к его элементам (полям, членам).
У класса существует ЗАКРЫТАЯ (private) часть класса и ОТКРЫТАЯ (public) часть класса.
С открытой частью класса можно работать также, как с полями структуры (открытыми).
Доступ к закрытой части класса ограничен. Так, все члены класса rectangle находятся в закрытой части класса. Поэтому, не возможно их использование, как для структур
// box.height = 12; - так можно писать для структуры, но не для класса.
Для работы с членами класса можно использовать только член-функции класса, которые объявлены в открытой части класса - box.initialize(12, 10); .
Член-функции area( ), initialize( ) – объявлены внутри класса, но не определены.
Их определение вынесено из класса. Поэтому при определении этих функций необходимо указывать, к какому типу данных относятся эти функции. Разные типы данных могут иметь член-функции с одинаковыми названиями. Чтобы не было путаницы, при определении член-функций, используется операция ::- это операция принадлежности, и она указывает компилятору к какому классу относится эта член-функция.
void rectangle::initialize( )
Посмотрите, что будет если тип rectangle определить, как структуру. Можно ли тогда обратиться к закрытой части? Что будет если член-функция area объявлена в закрытой части структуры?
3) программа Dc_2a.cpp
В этом примере данные в классе animal определены в открытой части класса. Поэтому в программе к ним можно обратиться напрямую, как к полям структуры, например: dog1.weight = 15; .
.
4) программа Dc_3.cpp
В классе rectangle появляются специальные функции:
rectangle(void) - конструктор класса
~rectangle(void) - деструктор класса
Конструктор - это специальная член-функция класса, имя которой совпадает с именем класса. Функция конструктор предназначена для инициализации, поэтому ей НЕ НАДО ничего возвращать. Поэтому тип возвращаемого значения не указывают.
Конструктор вызывается, когда под объект выделяется память.
Деструктор вызывается, когда память освобождается при уничтожении объекта.
Имя деструктора класса это ~имя_класса.
В этом примере конструктор устанвливает значения членов класса по 6,
а деструктор перед уничтожением объекта сбрасывает их в 0.
1) Чтобы посмотреть работу деструкторов запустите программу “через окошко DOS” для рабочего каталога (в командной строке Total Commanderа наберите cmd <Enter>
Задайте команду - Dc_3 <Enter>
Деструкторы вызываются , при выполнении return 0;
2) Чтобы это проверить выполните программу по шагам:
- перемещение до курсора к строке return 0;
- заход внутрь подпрограммы
3) Чтобы посмотреть порядок уничтожения объектов измените программу:
добавьте в деструктор класса rectangle комментарий в строку height=0, тогда будет выводиться величина height
Посмотрите на порядок вызова деструкторов, т.к. объекты последовательно создаются в стеке, то они уничтожаются в обратном порядке при освобождении стека.
4) Добавьте после объявления класса - определение объекта Q (уберите комментарий)..
Получится объявление нового типа rectangle и определение объекта Q этого типа.
Q – глобальный объект. Он создается ДО НАЧАЛА работы функции main(), а уничтожается после её окончания.
5) Посмотрите, что произойдёт если поменять ключевое слово class на struct или union
5) программа Dc_4.cpp
Этот пример показывает, что конструктор может иметь значение, заданное по умолчанию.
rectangle(int x=15) ;
В этом случае, если при создании объекта, не все аргументы заданы явно, то недостающие берутся, как значения, заданные по умолчанию
6) программа Dc_5.cpp
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.