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

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
параметрами, конструктор по умолчанию генерироваться не будет, и нам
необходимо создать его самим.
Рассмотренный нами пример имеет недостаток, связанный с
неэффективным использованием памяти. При создании объекта класса
Group память под массив студентов выделяется статически для хранения
двадцати элементов. Тем самым, с одной стороны, мы ограничиваем
количество студентов в группе (оно не должно превышать 20). С другой
стороны, если в группе будет двенадцать студентов, останется
неиспользованной память для восьми элементов массива. Этот недостаток
может быть устранен посредством динамического выделения памяти под
массив студентов. В этом случае определение класса Group должно
измениться:
в конструкторе класса Group должна выделяться память под
массив студентов;
при добавлении или исключении студента из группы должен
меняться размер массива, для чего выделяется новая область
памяти достаточного размера, и в новый массив записывается
модифицированный набор данных;
по-разному должны быть реализованы функции добавления
нового студента, если нет выделенной памяти для его хранения,
и если требуется заполнить уже выделенную память данными о
студенте. В класс добавляется еще одна функция
FillStudent() для заполнения уже существующего объекта, а
функция AddStudent() будет осуществлять добавление
нового студента, изменяя размер массива;
в функции удаления студента теперь также необходимо
изменять размер массива при удалении одного элемента. Это
повлечет изменения в функции DeleteStudent().
Приведем новые и модифицированные методы класса Group.
Конструкторы класса имеют следующий вид:
// Конструктор по умолчанию
Group::Group()
{
count = 0;
students = NULL;
}
// Конструктор с параметрами
Group::Group(char* ng, int ct)
72
                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
параметрами, конструктор по умолчанию генерироваться не будет, и нам
необходимо создать его самим.
    Рассмотренный нами пример имеет недостаток, связанный с
неэффективным использованием памяти. При создании объекта класса
Group память под массив студентов выделяется статически для хранения
двадцати элементов. Тем самым, с одной стороны, мы ограничиваем
количество студентов в группе (оно не должно превышать 20). С другой
стороны, если в группе будет двенадцать студентов, останется
неиспользованной память для восьми элементов массива. Этот недостаток
может быть устранен посредством динамического выделения памяти под
массив студентов. В этом случае определение класса Group должно
измениться:
       • в конструкторе класса Group должна выделяться память под
       массив студентов;
       • при добавлении или исключении студента из группы должен
       меняться размер массива, для чего выделяется новая область
       памяти достаточного размера, и в новый массив записывается
       модифицированный набор данных;
       • по-разному должны быть реализованы функции добавления
       нового студента, если нет выделенной памяти для его хранения,
       и если требуется заполнить уже выделенную память данными о
       студенте. В класс добавляется еще одна функция
       FillStudent() для заполнения уже существующего объекта, а
       функция AddStudent() будет осуществлять добавление
       нового студента, изменяя размер массива;
       • в функции удаления студента теперь также необходимо
       изменять размер массива при удалении одного элемента. Это
       повлечет изменения в функции DeleteStudent().
    Приведем новые и модифицированные методы класса Group.
Конструкторы класса имеют следующий вид:

     // Конструктор по умолчанию
     Group::Group()
     {
          count = 0;
          students = NULL;
     }

     // Конструктор с параметрами
     Group::Group(char* ng, int ct)


72