ВУЗ:
Составители:
Рубрика:
Объектно-ориентированное программирование на С++
Group в переменную students нового объекта будет копироваться
адрес массива студентов из исходного объекта. Таким образом,
получается, что два объекта-группы ссылаются на один и тот же массив.
Ошибка возникает при удалении одного из объектов, поскольку
деструктор освободит память, занимаемую массивом студентов, и
работать с другим объектом станет невозможно.
Поэтому необходимо определить конструктор копирования класса
Group, который создаст новый массив студентов с теми же значениями,
что и у исходного объекта:
// Конструктор копирования
Group::Group(const Group& gr)
{
count = gr.count;
strcpy (numberGr, gr.numberGr);
// Формирование копии массива студентов
students = new Student[gr.count];
for(int i = 0; i < count; i++)
students[i] = gr.students[i];
}
Предположим, в программе имеются объекты gr991 и gr992
класса Group. При вызове метода IntegrateGroup() для
объединения этих групп конструктор копирования срабатывает в
следующих случаях:
• при передаче объекта gr992 класса Group в качестве параметра
метода по значению:
Group gr990 = gr991.IntegrateGroup(gr992);
• при создании копии объекта-группы в методе IntegrateGroup();
Group newGroup(*this);
• при возврате объекта-группы в качестве результата метода
IntegrateGroup():
return newGroup;
77
Объектно-ориентированное программирование на С++
Group в переменную students нового объекта будет копироваться
адрес массива студентов из исходного объекта. Таким образом,
получается, что два объекта-группы ссылаются на один и тот же массив.
Ошибка возникает при удалении одного из объектов, поскольку
деструктор освободит память, занимаемую массивом студентов, и
работать с другим объектом станет невозможно.
Поэтому необходимо определить конструктор копирования класса
Group, который создаст новый массив студентов с теми же значениями,
что и у исходного объекта:
// Конструктор копирования
Group::Group(const Group& gr)
{
count = gr.count;
strcpy (numberGr, gr.numberGr);
// Формирование копии массива студентов
students = new Student[gr.count];
for(int i = 0; i < count; i++)
students[i] = gr.students[i];
}
Предположим, в программе имеются объекты gr991 и gr992
класса Group. При вызове метода IntegrateGroup() для
объединения этих групп конструктор копирования срабатывает в
следующих случаях:
• при передаче объекта gr992 класса Group в качестве параметра
метода по значению:
Group gr990 = gr991.IntegrateGroup(gr992);
• при создании копии объекта-группы в методе IntegrateGroup();
Group newGroup(*this);
• при возврате объекта-группы в качестве результата метода
IntegrateGroup():
return newGroup;
77
Страницы
- « первая
- ‹ предыдущая
- …
- 75
- 76
- 77
- 78
- 79
- …
- следующая ›
- последняя »
