1. Определить пользовательский класс в соответствии с вариантом задания (смотри приложение).
2. Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.
3. Определить в классе деструктор.
4. Определить в классе компоненты-функции для просмотра и установки полей данных.
5. Определить указатель на компоненту-функцию.
6. Определить указатель на экземпляр класса.
7. Написать демонстрационную программу, в которой создаются и разрушаются объекты пользовательского класса и каждый вызов конструктора и деструктора сопровождается выдачей соответствующего сообщения (какой объект какой конструктор или деструктор вызвал).
8. Показать в программе использование указателя на объект и указателя на компоненту-функцию.
Методические указания.
1. Приме р определения класса.
const int LNAME=25;
class STUDENT{
char name[LNAME]; // имя
int age; // возраст
float grade; // рейтинг
public:
STUDENT(); // конструктор без параметров
STUDENT(char*,int,float); // конструктор с параметрами
STUDENT(const STUDENT&); // конструктор копирования
~STUDENT();
char * GetName();
int GetAge() const;
float GetGrade() const;
void SetName(char*);
void SetAge(int);
void SetGrade(float);
void Set(char*,int,float);
void Show(); };
Более профессионально определение поля name типа указатель: char* name. Однако в этом случае реализация компонентов-функций усложняется.
2. Пример реализации конструктора с выдачей сообщения.
STUDENT::STUDENT(char*NAME,int AGE,float GRADE)
{
strcpy(name,NAME); age=AGE; grade=GRADE;
cout<< \nКонструктор с параметрами вызван для объекта <<this<<endl;
}
3. Следует предусмотреть в программе все возможные способы вызова конструктора копирования. Напоминаем, что конструктор копирования вызывается:
а) при использовании объекта для инициализации другого объекта
|
Пример.
STUDENT a(“Иванов”,19,50), b=a;
б) когда объект передается функции по значению
Пример.
void View(STUDENT a){a.Show;}
в) при построении временного объекта как возвращаемого значения функции
Пример.
STUDENT NoName(STUDENT & student)
{STUDENT temp(student);
temp.SetName(“NoName”);
return temp;}
STUDENT c=NoName(a);
4. В программе необходимо предусмотреть размещение объектов как в статической, так и в динамической памяти, а также создание массивов объектов.
Примеры.
а) массив студентов размещается в статической памяти
STUDENT gruppa[3];
gruppa[0].Set(“Иванов”,19,50);
и т.д.
или
STUDENT gruppa[3]={STUDENT(“Иванов”,19,50),
STUDENT(“Петрова”,18,25.5),
STUDENT(“Сидоров”,18,45.5)};
б) массив студентов размещается в динамической памяти
STUDENT *p;
p=new STUDENT [3];
p-> Set(“Иванов”,19,50);
и т.д.
5. Пример использования указателя на компонентную функцию
void (STUDENT::*pf)();
pf=&STUDENT::Show;
(p[1].*pf)();
6. Программа использует три файла:
* заголовочный h-файл с определением класса,
* cpp-файл с реализацией класса,
* сpp-файл демонстрационной программы.
Для предотвращения многократного включения файла-заголовка следует использовать директивы препроцессора
#ifndef STUDENTH
#define STUDENTH
// модуль STUDENT.H
...
#endif
Содержание отчета.
1. Титульный лист: название дисциплины; номер и наименование работы; фамилия, имя, отчество студента; дата выполнения.
2. Постановка задачи. Следует дать конкретную постановку, т.е. указать, какой класс должен быть реализован, какие должны быть в нем конструкторы, компоненты-функции и т.д.
3. Определение пользовательского класса с комментариями.
4. Реализация конструкторов и деструктора.
|
5. Фрагмент программы, показывающий использование указателя на объект и указателя на функцию с объяснением.
6. Листинг основной программы, в котором должно быть указано, в каком месте и какой конструктор или деструктор вызываются.
Приложение. Варианты заданий.
Описания членов - данных пользовательских классов
1. СТУДЕНТ
имя – char*
курс – int
пол – int(bool)
2. ИЗДЕЛИЕ
имя – char*
шифр – char*
количество – int
3. АДРЕС
имя – char*
улица – char*
номер дома – int
4. ЦЕХ
имя – char*
начальник – char*
количество
работающих – int
5. СТРАНА
имя – char*
форма
правления – char*
площать – float
6. СЛУЖАЩИЙ
имя – char*
возраст – int
рабочий стаж – int
7. БИБЛИОТЕКА
имя – char*
автор – char*
стоимость – float
8. ТОВАР
имя – char*
количество – int
стоимость – float
9. ПЕРСОНА
имя – char*
возраст – int
пол – int(bool)
10. ЖИВОТНОЕ
имя – char*
класс – char*
средний вес – int
11. КАДРЫ
имя – char*
номер цеха – int
разряд – int
12. ЭКЗАМЕН
имя студента – char*
дата – int
оценка – int
13. КВИТАНЦИЯ
номер – int
дата – int
сумма – float
14. АВТОМОБИЛЬ
марка – char*
мощность – int
стоимось – float
15. КОРАБЛЬ
имя – char*
водоизмещение – int
тип – char*