Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив1 / doc200 / Пр16_ОП

.doc
Скачиваний:
17
Добавлен:
01.08.2013
Размер:
97.28 Кб
Скачать

Практическая работа №16. Реализация раздельной компиляции.

Цель: изучение принципов раздельной компиляции в языке С++.

Оборудование: ПК.

Задание:

  1. Для задачи,выполненной в практической работе №15, выполнить разбиение кода на три файла:

    1. интерфейсную часть, содержащую объявление класса, разместить в заголовочном файле с расширением .h;

    2. реализацию класса, содержащую описание функций класса, разместить в файле с расширением .cpp (имя файла должно совпадать с именем заголовочного файла).

    3. программу, использующую класс, разместить в файле с расширением .cpp.

При выполнении задания следует руководствоваться предложенным примером – обратите внимание на выделенные команды.

  1. Выполнить компиляцию файла реализации и файла программы с помощью команды: c++ -c имя_файла_1.cpp имя_файла_2.cpp.

  2. Скомпоновать файлы с помощью команды: c++ имя_файла_1.o имя_файла_2.o -o имя_исполняемого_файла.

  3. Протестировать работу программы.

  4. Оформить отчет, который должен содержать:

  • тему;

  • цель;

  • оборудование;

  • задание;

  • исходный код программы;

  • результаты работы программ;

  • вывод.

Пример:

//Заголовочный файл dayyear.h

//Это интерфейс класса DayOfYear

#ifndef DAYYEAR_H

#define DAYYEAR_H

class DayOfYear

{

public:

friend bool equal(DayOfYear date1, DayOfYear date2);

//Предусловие:аргументы date1 и date2

// содержат значения

//Возвращает true, если значения аргументов

// date1 и date2 представляют одну и ту же дату,

// иначе - false

void input();

void output();

DayOfYear(int new_day, int new_month);

// Предусловие: значения аргументов new_day

// и new_month составляют допустимую дату.

// Постусловие: дата изменена в соответствии

// со значениями аргументов.

DayOfYear();

// Инициализирует дату значением 1 января

int get_month();

// Возвращает порядковый номер месяца:

// 1 для января, 2 для февраля и т. д.

int get_day();

// Возвращает номер дня месяца.

//Это часть реализации, а не интерфейса.

private:

void check_date();

// Проверка даты

int day;

int month;

};

#endif //DAYYEAR_H

//Файл реализации dayyear.cpp

#include <iostream>

#include <cstdlib>

#include "dayyear.h"

using namespace std;

bool equal(DayOfYear date1, DayOfYear date2)

{

return (date1.month == date2.month

&&date1.day == date2.day);

}

DayOfYear::DayOfYear(int new_day, int new_month)

:day(new_day),month(new_month)

{

check_date();

}

DayOfYear::DayOfYear():day(1), month(1)

{

}

void DayOfYear::input()

{

cout << "Введите день месяца: ";

cin >> day;

cout << "Введите месяц как число: ";

cin >> month;

// Закрытые поля могут применяться

// только в определениях методов

check_date();

}

void DayOfYear::output()

{

cout << "день = " << day

<< ", месяц = " << month << endl;

}

// Метод check_date проверяет не все возможные

// способы неверного задания даты, но её можно

// дополнить, чтобы проверка была исчерпывающей

void DayOfYear::check_date()

{

if ((month < 1) || (month > 12)

|| (day < 1) || (day > 31))

{

cout << "Некорректная дата.\n"

<< "Работа программы завершена.\n";

exit(1);

}

}

int DayOfYear::get_month()

{

return month;

}

int DayOfYear::get_day()

{

return day;

}

//daydemo.cpp

//Файл программы, использующей класс DayOfYear

#include <iostream>

#include "dayyear.h"

using namespace std;

int main()

{

DayOfYear today, birthday(10,1);

cout << "Введите текущую дату\n";

today.input();

cout << "Сегодня: ";

today.output();

cout << "Ваш день рождения: ";

birthday.output();

if (equal(today, birthday))

cout << "С Днем рождения!\n";

else

cout << "Не жди гостей!\n";

return 0;

}

Контрольные вопросы:

  1. Что такое класс?

  2. Как объявить класс?

  3. Как описать метод класса?

  4. Как объявить объекты?

  5. Как инициализировать объект?

  6. Как обратиться к полям класса?

  7. Как выполняется операция присваивания для объектов?

  8. Что такое конструктор?

  9. Как объявить конструктор?

  10. Что такое дружественная функция?

  11. Как объявить дружественную функцию?

  12. Как определить дружественную функцию?

  13. Как выполнить перегрузку оператора?

  14. Что такое интерфейс класса?

  15. Что такое реализация класса?

  16. Как выполнить компиляцию нескольких файлов?

  17. Как выполнить компоновку нескольких файлов?

  18. Как выполняются операторы, использованные в программе?