
- •Наследование классов
- •Лабораторная работа № 5
- •Задание
- •Спроектировать производный класс, являющийся наследником класса из лабораторной работы № 2 и дополнительно содержащий поля для перечня и методы их обработки:
- •Спроектировать производный класс, являющийся наследником класса из пункта 1 и дополнительно содержащий поля для результатов поиска и методы их обработки:
- •Во всех классах должны быть определены следующие специальные методы:
- •Лабораторная работа № 5
- •Объявление и определение базового класса masA
- •Объявление и определение производного класса masВ
- •Определение конструктора копирования класса masB
- •Определение перегруженной операции присваивания класса masB
- •Определение метода makePerech (…) класса masB
- •Объявление и определение производного класса masС
- •Определение конструктора копирования класса masС
- •Определение перегруженной операции присваивания класса masC
- •Определение метода findGrup(…) класса masС
- •Основная программа
- •Варианты заданий
- •Варианты заданий те же, что и в лр 4.
Определение метода makePerech (…) класса masB
void masB:: makePerech ()
{ int i, j, fl;
gruppa *y;
y= new gruppa [n];
if (y ==NULL) { cout << “ Нет памяти.\n”;
getch (); return:
}
k=0;
if py!=NULL) delete[] py;
for (i=0; i<n; i++)
{ fl=0;
for (j=0; j<k; j++)
if (px[i].gr == y[j].gr)
{fl=1; y[j].ng++ }
if (fl==0) {y[k].gr =px{i}.gr;
y[k].ng=1;
n++; }
}
py = new gruppa [k];
if (py ==NULL) { cout<<”Нет памяти для перечня.\n”;
getch (); k=0; delete[] у; return;
}
for (j=0; j<k; j++)
py[j] = y[j];
delete [] y;
cout << “Перечень сформирован.\n”;
getch();
}
Примечание:
Метод makePerech (…) класса masB имеет прямой доступ к собственным полям, так и к защищенным полям рх и n (режим доступа protected:) класса masА, доставшимся классу masB по наследству от родителя - класса masА.
Объявление и определение производного класса masС
clas masC : public masВ
{ protected:
student *pz;
int l;
public:
masC() : pz(NULL), l(0) {}
masC(masC &z);
~masC() {if {pz!=NULL) delete [] pz; }
masC& operator=(masC &z);
void outputFile();
void sortName();
void sortDat();
void findGrup();
friend ostream & operator<<(ostream &out, masC &z);
};
Примечание:
Определения методов класса masС outputFile(), sortName(), sortDat() и дружественной функции operator <<(…) абсолютно те же самые, что и в
программе лабораторной работы №3. Остальные методы имеют небольшие отличия, поэтому их определения приводятся ниже.
Определение конструктора копирования класса masС
masС :: masС(masС & z) : masВ (z)
{ int i;
l=z.l;
if (z.pz ==NULL) pz=NULL;
else { pz=new student [z];
if(pz==NULL) {cout<< “Нет памяти.\n”;
cout<< “Конструктор копирования.\n”;
getch (); exit(1);
}
for (i=0; i<k; i++)
pz[i] =z.pz[i];
}
} // конец конструктора копирования класса masC
Примечание:
Конструктор копирования класса masC, для копирования родительской части вызывает конструктор копирования родителя (класса masB). Вызов указан в заголовке конструктора копирования класса masC после двоеточия (выделено). В этом месте указан явный вызов конструктора копирования класса masB для объекта z. Копирование же собственной части класса masC абсолютно то же самое, что и в конструкторе копирования класса masC программы лабораторной работы №3.
Определение перегруженной операции присваивания класса masC
masC & masC :: operator= (masC &z)
{ int i;
if (this == & z) return *this;
// Вызов перегруженной операции присваивания класса masB для
masB :: operator=(z); // присваивания родительской части объекта z
if (pz! = NULL) delete [] pz;
l=z.l;
if (z.pz == NULL) pz=NULL;
else { pz=new student[k];
if (pz=NULL) { cout<< “Нет памяти при присваивании. \n”
getch (); return z;
}
for (i=0; i<k; i++)
pz[i] =z.pz[i];
}
retirn *this;
} // Конец перезагрузки оператора присваивания класса masB
Примечание:
Перегруженная операция присваивания класса masC, для присваивания родительской части объекта z, вызывает явно перегруженную операцию присваивания класса masB (masB :: operator= (z); ). Присваивание же собственной части класса masC абсолютно то же самое, что и в определении перегруженной операции присваивания класса masC программы лабораторной работы №3.