Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СМП Лабораторная работа №5.doc
Скачиваний:
0
Добавлен:
07.07.2024
Размер:
92.16 Кб
Скачать

Определение метода 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.