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

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
В нашем примере память, занятую массивом студентов в объекте
класса Group, надо освобождать при уничтожении объекта. Для этого
добавляем в определение класса деструктор:
// деструктор
Group::~Group()
{
delete [] students;
cout << "Группа удалена" << endl;
}
Существует еще один вид конструктора, который называется
конструктором копирования. Он вызывается, когда объекты класса
являются параметрами или возвращаемыми значениями некоторых
функций. Также он используется в случае явного создания копии уже
существующего объекта.
Например, необходимо объединить две учебные группы в одну. Для
этого создадим метод IntegrateGroup() класса Group:
// Метод объединения двух групп
Group Group::IntegrateGroup(Group gr)
{
Group newGroup(*this); // или
// Group newGroup = (*this);
for(int i = 0; i < gr.count; i++)
newGroup.AddStudent(gr.students[i]);
return newGroup;
}
Объединение групп происходит следующим образом: к объекту-
группе, для которого вызывается метод IntegrateGroup(),
добавляются студенты из группы, передаваемой в качестве параметра. В
методе создается новый объект-группа, который является копией первой
группы, а затем с помощью метода AddStudent(Student)
добавляются студенты из второй группы. Метод возвращает созданную
группу.
Без определенного в классе конструктора копирования работа метода
будет некорректной. Конструктор копирования, так же как и конструктор
по умолчанию, предоставляется компилятором в случае его отсутствия в
определении класса. Он осуществляет поэлементное копирование
значений всех атрибутов объекта. При создании копии объекта класса
76
                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
    В нашем примере память, занятую массивом студентов в объекте
класса Group, надо освобождать при уничтожении объекта. Для этого
добавляем в определение класса деструктор:

     // деструктор
     Group::~Group()
     {
          delete [] students;
          cout << "Группа удалена" << endl;
     }

    Существует еще один вид конструктора, который называется
конструктором копирования. Он вызывается, когда объекты класса
являются параметрами или возвращаемыми значениями некоторых
функций. Также он используется в случае явного создания копии уже
существующего объекта.
    Например, необходимо объединить две учебные группы в одну. Для
этого создадим метод IntegrateGroup() класса Group:

     // Метод объединения двух групп
     Group Group::IntegrateGroup(Group gr)
     {

          Group newGroup(*this); // или
                                 // Group newGroup = (*this);
          for(int i = 0; i < gr.count; i++)
               newGroup.AddStudent(gr.students[i]);
          return newGroup;
     }

    Объединение групп происходит следующим образом: к объекту-
группе, для которого вызывается метод IntegrateGroup(),
добавляются студенты из группы, передаваемой в качестве параметра. В
методе создается новый объект-группа, который является копией первой
группы, а затем с помощью метода AddStudent(Student)
добавляются студенты из второй группы. Метод возвращает созданную
группу.
    Без определенного в классе конструктора копирования работа метода
будет некорректной. Конструктор копирования, так же как и конструктор
по умолчанию, предоставляется компилятором в случае его отсутствия в
определении класса. Он осуществляет поэлементное копирование
значений всех атрибутов объекта. При создании копии объекта класса

76