Порядок выполнения работы.




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*



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: