Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа4.doc
Скачиваний:
3
Добавлен:
30.11.2018
Размер:
130.05 Кб
Скачать

Порядок выполнения работы

  1. Изучить инструкцию по выполнению практической работы

Разделим интерфейс и реализацию класса Date. Для этого необходимо:

  1. Создать заголовочный файл Date.h (File-New....Save as... тип файла-Header files с расширением *.h) Поместить в созданный заголовочный файл описание класса Date.

  2. Сохранить файл Date.h (интерфейс класса) в одной директории с файлом Date.cpp

  3. В файл Date.cpp подключить файл Date.h

  4. Откомпилировать файл Date.cpp и запустить его на выполнение. Проанализировать результаты выполнения программы и занести в отчет.

  5. Создать файл Date1.h и поместить туда описания данных, определения констант, используемых в программе с датами. При этом учесть, что данные определены в другом файле.

  6. Сделать функцию leapyear() встраиваемой и добавить ее определение в файл Date1.h. При необходимости внести изменения в прототип данной функции в др. файлах.

  7. Модифицировать файл Date.сcp так, чтобы он содержал только реализацию класса Date.

  8. Создать отдельный демонстрационный модуль demo.cpp, которые содержит определение функции main(), демонстрирующей операции с датами. В данный модуль подключить Date.h, Date1.h, Date.cpp.

  9. Запустить демонстрационный модуль на выполнение и проанализировать результат выполнения программы.

  10. Проанализировать предложенные программные коды на наличие ошибок компоновки, определить характер ошибок, причины и пути их устранения

  11. Оформить отчет по проделанной работе

Таблица 1. Примеры программного кода

п/п

Программный код

Ошибка, причина

Пути устранения

1

Рассмотрим, например, два файла:

// file1.c:

int a = 1;

int b = 1;

extern int c;

// file2.c:

int a;

extern double b;

extern int c;

Эти виды ошибок (ошибки компоновки) не могут быть обнаружены компилятором, который за один раз видит только один файл. Компоно-вщик, однако, их обнаруживает.

2

Рассмотрим, два файла:

// file1.c:

int a;

int f() { return a; }

// file2.c:

int a;

int g() { return f(); }

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

1. Опишите механизм вызова встраиваемой функции? Приведите примеры 2 способов создания встраиваемых функций-членов определенного класса.

2. Установите, какие из приведенных ниже инструкций являются объявлениями, а какие –определениями, и почему:

(a) extern int ix = 1024;

(b) int iy;

(c) extern void reset( void *p ) { /* ... */ }

(d) extern const int *pi;

(e) void print( const matrix & );

  1. Какие из приведенных ниже объявлений и определений вы поместили бы в заголовочный файл? В исходный файл? Почему?

(a) int var;

(b) inline bool is_equal( const SmallInt &, const SmallInt & ){ }

(c) void putValues( int *arr, int size );

(d) const double pi = 3.1416;

(e) extern int total = 255;