Объектно-ориентированное программирование на C++. Андрианова А.А - 62 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
один раз. Но может случиться так, что один и тот же h-файл может быть
подключен несколько раз косвенно через другие заголовочные файлы. В
нашем примере файл Student.h должен быть подключен в файлах
Student.cpp”, Group.h и main.cpp”, поскольку в них
используется класс Student для создания объектов. При этом в файле
main.cpp происходит подключение файла Student.h дважды:
явно и через Group.h”. В этом случае возникает ошибка. Чтобы
избежать этого, существует стандартный прием. В его основу положена
директива
#ifndef _STUDENT_H_
#define _STUDENT_H_
// объявление класса Student
. . .
#endif
Она означает: выполнить операторы, заключенные между #ifndef
и #endif только в случае, если имя _STUDENT_H_ не определено, т.е.
ранее не встречалась директива #define _STUDENT_H_. Тогда файл
Student.h будет подключен к другому файлу только один раз.
// файл Student.h
#ifndef _STUDENT_H_
#define _STUDENT_H_
// объявление класса «Студент»
class Student
{
private:
char fio[100]; // фамилия, имя, отчество
int dayBirth; // дата рождения
int monthBirth;
int yearBirth;
int numberOfTestBook; // номер зачетной книжки
double averageMark; // средний балл успеваемости
public:
// метод инициализации данных студента
void Init(char*, int, int, int, int, double = 0.0);
// метод заполнения свойств студента
void Fill(char*, int, int, int, int, double);
// метод получения фамилии,
// имени и отчества студента
char* GetFio();
// метод получения даты рождения
62
                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
один раз. Но может случиться так, что один и тот же h-файл может быть
подключен несколько раз косвенно через другие заголовочные файлы. В
нашем примере файл “Student.h” должен быть подключен в файлах
“Student.cpp”,      “Group.h” и “main.cpp”, поскольку в них
используется класс Student для создания объектов. При этом в файле
“main.cpp” происходит подключение файла “Student.h” дважды:
явно и через “Group.h”. В этом случае возникает ошибка. Чтобы
избежать этого, существует стандартный прием. В его основу положена
директива

     #ifndef _STUDENT_H_
     #define _STUDENT_H_
     // объявление класса Student
     .    .    .
     #endif

    Она означает: выполнить операторы, заключенные между #ifndef
и #endif только в случае, если имя _STUDENT_H_ не определено, т.е.
ранее не встречалась директива #define _STUDENT_H_. Тогда файл
“Student.h” будет подключен к другому файлу только один раз.

     // файл Student.h

     #ifndef _STUDENT_H_
     #define _STUDENT_H_

     // объявление класса «Студент»
     class Student
     {
     private:
          char fio[100]; // фамилия, имя, отчество
          int dayBirth; // дата рождения
          int monthBirth;
          int yearBirth;
          int numberOfTestBook; // номер зачетной книжки
          double averageMark; // средний балл успеваемости
     public:
          // метод инициализации данных студента
          void Init(char*, int, int, int, int, double = 0.0);
          // метод заполнения свойств студента
          void Fill(char*, int, int, int, int, double);
          // метод получения фамилии,
          // имени и отчества студента
          char* GetFio();
          // метод получения даты рождения

62