Методика по созданию одномерных динамических массивов объектов заданного класса, при помощи конструкторов с захватом динамической памяти и деструкторов для их уничтожения

Страницы работы

Фрагмент текста работы

Если класс содержит поля,  память под которые выделяется динамически, необходимо определить собственную операцию присваивания. Чтобы сохранить семантику присваивания.

Функция-operatorприсвоения должна возвращать ссылку на объект, для которого она вызвана, и принимать в качестве параметра единственный аргумент – ссылку на присваиваемый объект.

Оператор присвоения имеет следующий вид:

имя_класса& operator= (const имя_класса& );

Возврат функцией ссылки на объект делает возможной цепочку операций присваивания:

Функция-operator присвоения можно определять только как метод класса.

Функция-operator присвоения не наследуется.

Дружественные функции

В С++ одна функция не может быть компонентой двух различных классов. В то же время иногда возникает необходимость организации доступа к локальным данным нескольких классов из одной функции. Для реализации этого в С++ введен спецификатор friend.

Дружественная функция используется в трех случаях:

1.  перегрузки некоторых операторов;

2.   специальных функций ввода/вывода;

3.   в случае если необходима функция, которая имеет доступ к закрытым членам двух или более классов.

Правила описания и особенности дружественных функций:

1.  дружественная функция объявляется внутри класса, к элементам которого ей нужен доступ, с ключевым словом friend.

2.  В качестве параметра ей должен передаваться объект или ссылка на объект класса, поскольку указатель this данной функции не передается.

3.  Дружественная функция может быть обычной функцией или методом другого ранее определенного класса.

4.  На дружественную функцию не распространяется действие спецификаторов доступа, место размещения ее объявления в классе безразлично.

5.  Одна функция может быть дружественной сразу нескольким классам.

6.  Дружественная функция не наследуется.

Постановка задачи. Элементом класса является список студентов группы, который включает: фамилию, имя, отчество студента; номер группы(пять цифр и одна буква); средний балл и доход на одного члена семьи. Количество студентов в группе не более 30, но заранее не известно. Определите массив объектов указанного типа(групп не более 25). Напишите программу представления места в общежитии. Общежитие в первую очередь представляется тем студентам, у кого доход на члена семьи меньше трех минимальных зарплат, затем остальным в порядке уменьшения среднего балла. Количество мест в общежитии задается с клавиатуры. Выведите общий алфавитный список очерёдности представления мест в общежитие по всем группам.

Требования к контрольной работе:

В состав класса входят следующие функции члены класса:

конструктор с параметрами;

конструктор копирования;

деструктор;

функция просмотра текущего состояния объектов PRINT();

#include<iostream.h>

#include <string.h>

#include <stdlib.h>

class Dormitory{

// компоненты-данные

char*surname;// поле для фамилии

char*name; ;// поле для имени

char group[7];// предположим что у нас только следующие группы 101, 102, 201,                                    //201, 301, 302, 401, 402, 501, 502

double sr_ball; //поле для среднего балла

double income;// поле для хранения дохода одного члена семьи

//дружественная функция сортировки в алфавитном порядке по фамилии

friend void sort_surname(Dormitory*,int,int);

//дружественная функция сортировки в порядке возрастания по доходу

friend void sort_income(Dormitory*,int);

//дружественная функция сортировки в порядке убывания по среднему баллу

friend void sort_sr_ball(Dormitory*,int);

//дружественная функция для вывода, тех студентов которым необходимо общежитие

friend void SHOW(Dormitory*,int, double,int);

//дружественная функция перегрузки ввода

friend istream& operator>>(istream&out,Dormitory&ob);

//статически поля для проверки количества студентов в группе

static int count[10];

public:

//конструктор без параметров

Dormitory();

//конструктор с параметрами

Dormitory(char*sn,char*n,char*gr, double , double );

//конструктор копирования

Dormitory(const Dormitory&);

//метод переустановки поля фамилия

void Set_surname(char*);

//метод переустановки поля имени

void Set_name(char*);

//метод переустановки поля группы

int Set_group(char*);

//метод переустановки поля среднего балла

void Set_sr_ball(double);

//метод переустановки поля, где хранится информация о доходе одного члена семьи

void Set_income(double);

//перегрузка оператора присваивания

Dormitory& operator= (const Dormitory&);

//деструктор

~Dormitory();

//метод просмотра текущего состояния объектов

void PRINT();

};

//инициализация статических полей

int Dormitory::count[10]={0};

// описание конструктора без параметров, который обнуляет все поля

Dormitory::Dormitory()

{

surname = NULL;

name = NULL;

strcpy(group,"\0");

sr_ball=0.0;

income=0.0;

}

//описание конструктора с параметрами

Dormitory::Dormitory(char*sn,char*n,char*gr,double sr,double inc){

// вызов метода переустановки поля фамилия

Set_surname(sn);

// вызов метода переустановки поля имени

Set_name(n);

//вызов метода переустановки поля группы

Set_group(gr);

//вызов метода переустановки поля среднего балла

Set_sr_ball(sr);

//вызов метода переустановки поля, где хранится информация о доходе

Похожие материалы

Информация о работе