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

UptoLike

Объектно-ориентированное программирование на С++
памяти new и присваивании адреса этого объекта указателю на базовый
класс:
Student* pStud = new
ContractStudent("Петров Петр Петрович",
2, 2, 1990, 222, 50000.0);
. . .
delete pStud;
При вызове операции delete для уничтожения объекта с помощью
указателя на базовый класс должен вызваться деструктор производного
класса.
Продемонстрируем использование механизма виртуальных функций
на примере класса Group. Теперь все методы класса Student,
переопределенные в классе ContractStudent, будут являться
виртуальными. В классе Group будем хранить массив указателей на
объекты класса Student, которые могут содержать адреса студентов как
бюджетной формы обучения, так и контрактной. В этом случае при
определении списка студентов в группе необходимо указывать, к какому
классу нужно обращаться при создании объекта-студента. Для этого в
методе заполнения FillStudent() запрашивается тип студента
(переменная type) и далее создание объекта происходит в зависимости
от значения этой переменной:
. . .
int type = 0;
while(true)
{
cout << "Введите 1, если студент-бюджетник,
2 - если студент-контрактник";
cin >> type;
if(type == 1 || type == 2)
break;
}
double pay = 0;
if(type == 2)
{
while(true)
{
cout << "Введите размер платы
за обучение в семестре:";
cin >> pay;
if(pay > 0)
break;
109
                          Объектно-ориентированное программирование на С++
памяти new и присваивании адреса этого объекта указателю на базовый
класс:
     Student* pStud = new
                    ContractStudent("Петров Петр Петрович",
                                    2, 2, 1990, 222, 50000.0);
     .    .    .
     delete pStud;

     При вызове операции delete для уничтожения объекта с помощью
указателя на базовый класс должен вызваться деструктор производного
класса.
    Продемонстрируем использование механизма виртуальных функций
на примере класса Group. Теперь все методы класса Student,
переопределенные в классе ContractStudent, будут являться
виртуальными. В классе Group будем хранить массив указателей на
объекты класса Student, которые могут содержать адреса студентов как
бюджетной формы обучения, так и контрактной. В этом случае при
определении списка студентов в группе необходимо указывать, к какому
классу нужно обращаться при создании объекта-студента. Для этого в
методе заполнения FillStudent() запрашивается тип студента
(переменная type) и далее создание объекта происходит в зависимости
от значения этой переменной:

     .    .    .
     int type = 0;
     while(true)
     {
          cout << "Введите 1, если студент-бюджетник,
                              2 - если студент-контрактник";
          cin >> type;
          if(type == 1 || type == 2)
                break;
     }
     double pay = 0;
     if(type == 2)
     {
          while(true)
          {
               cout << "Введите размер платы
                                   за обучение в семестре:";
               cin >> pay;
               if(pay > 0)
                    break;
                                                                      109