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

UptoLike

Объектно-ориентированное программирование на С++
gr.DeleteStudent(st);
gr.Print();
}
2.2.4. Конструкторы и деструктор
Обратимся к примеру о студентах и учебной группе, приведенному
в разделе 2.2.3. Как уже было сказано, объекты класса являются
обычными переменными. Поэтому использование объектов класса
должно быть таким же удобным, как и использование переменных.
Например, хотелось бы иметь возможность инициализировать объект
класса при его создании так же, как и объект структуры:
// ошибка !!!
Student std={"Иванов Иван Иванович", 21, 5,
1989, 123, 0.0};
Однако в этом случае возникнет ошибка. Причина ее в том, что
закрытые свойства класса недоступны извне. К ним могут обращаться
только методы этого класса. Именно поэтому в нашем примере созданы
функции инициализации объектов классов Student и Group. С их
помощью инициализация объекта происходит в два этапа: создание
переменной и заполнение ее данными:
// правильно !
Student std;
std.Init("Иванов Иван Иванович", 21, 5, 1989, 123, 0.0);
Но даже при использовании этого приема для создания объекта
могут возникнуть ошибки. Допустим, при создании учебной группы
программист забыл вызвать метод инициализации. Тогда свойство count
(количество студентов в группе) будет иметь некорректное значение. В
дальнейшем вызов методов класса Group может привести к
возникновению ошибки, поскольку это свойство используется при
обращении к элементам массива объектов-студентов. Этого можно
избежать, если предусмотреть обработку этих ошибок во всех методах
класса. Но такой подход очень трудоемкий. Гораздо легче избежать
ошибок, если будет производиться корректная инициализация данных.
Подобные проблемы решаются с помощью специальных функций,
которые вызываются при создании объекта и называются
69
                          Объектно-ориентированное программирование на С++
          gr.DeleteStudent(st);
          gr.Print();
     }



                              2.2.4. Конструкторы и деструктор

     Обратимся к примеру о студентах и учебной группе, приведенному
в разделе 2.2.3. Как уже было сказано, объекты класса являются
обычными переменными. Поэтому использование объектов класса
должно быть таким же удобным, как и использование переменных.
Например, хотелось бы иметь возможность инициализировать объект
класса при его создании так же, как и объект структуры:

     // ошибка !!!
     Student std={"Иванов Иван Иванович", 21, 5,
                                       1989, 123, 0.0};

    Однако в этом случае возникнет ошибка. Причина ее в том, что
закрытые свойства класса недоступны извне. К ним могут обращаться
только методы этого класса. Именно поэтому в нашем примере созданы
функции инициализации объектов классов Student и Group. С их
помощью инициализация объекта происходит в два этапа: создание
переменной и заполнение ее данными:

     // правильно !
     Student std;
     std.Init("Иванов Иван Иванович", 21, 5, 1989, 123, 0.0);

    Но даже при использовании этого приема для создания объекта
могут возникнуть ошибки. Допустим, при создании учебной группы
программист забыл вызвать метод инициализации. Тогда свойство count
(количество студентов в группе) будет иметь некорректное значение. В
дальнейшем вызов методов класса Group может привести к
возникновению ошибки, поскольку это свойство используется при
обращении к элементам массива объектов-студентов. Этого можно
избежать, если предусмотреть обработку этих ошибок во всех методах
класса. Но такой подход очень трудоемкий. Гораздо легче избежать
ошибок, если будет производиться корректная инициализация данных.
    Подобные проблемы решаются с помощью специальных функций,
которые вызываются при создании объекта и называются
                                                                        69