Порядок выполнения работы
-
Изучить инструкцию по выполнению практической работы
Разделим интерфейс и реализацию класса Date. Для этого необходимо:
-
Создать заголовочный файл Date.h (File-New....Save as... тип файла-Header files с расширением *.h) Поместить в созданный заголовочный файл описание класса Date.
-
Сохранить файл Date.h (интерфейс класса) в одной директории с файлом Date.cpp
-
В файл Date.cpp подключить файл Date.h
-
Откомпилировать файл Date.cpp и запустить его на выполнение. Проанализировать результаты выполнения программы и занести в отчет.
-
Создать файл Date1.h и поместить туда описания данных, определения констант, используемых в программе с датами. При этом учесть, что данные определены в другом файле.
-
Сделать функцию leapyear() встраиваемой и добавить ее определение в файл Date1.h. При необходимости внести изменения в прототип данной функции в др. файлах.
-
Модифицировать файл Date.сcp так, чтобы он содержал только реализацию класса Date.
-
Создать отдельный демонстрационный модуль demo.cpp, которые содержит определение функции main(), демонстрирующей операции с датами. В данный модуль подключить Date.h, Date1.h, Date.cpp.
-
Запустить демонстрационный модуль на выполнение и проанализировать результат выполнения программы.
-
Проанализировать предложенные программные коды на наличие ошибок компоновки, определить характер ошибок, причины и пути их устранения
-
Оформить отчет по проделанной работе
Таблица 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 & );
-
Какие из приведенных ниже объявлений и определений вы поместили бы в заголовочный файл? В исходный файл? Почему?
(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;