Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Указатели на компоненты-функции




 

Можно определить указатель на компоненты-функции.

тип_возвр_значения(имя_класса::*имя_указателя_на_функцию) (специф_параметров_функции);

Пример.

double(complex::*ptcom)(); // Определение указателя

ptcom = &complex:: real; // Настройка указателя

// Теперь для объекта А можно вызвать его функцию

complex A(5.2,2.7);

cout<<(A.*ptcom)();

 

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

 

4. 1Определить пользовательский класс в соответствии с вариантом задания (смотри приложение).

5. Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.

6. Определить в классе деструктор.

7. Определить в классе компоненты-функции для просмотра и установки полей данных.

8. Определить указатель на компоненту-функцию.

9. Определить указатель на экземпляр класса.

10. Написать демонстрационную программу, в которой создаются и разрушаются объекты пользовательского класса и каждый вызов конструктора и деструктора сопровождается выдачей соответствующего сообщения (какой объект какой конструктор или деструктор вызвал).

11. Показать в программе использование указателя на объект и указателя на компоненту-функцию.

Методические указания.

 

Приме р определения класса.

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)();

 

Содержание отчета.

 

1. Титульный лист: название дисциплины; номер и наименование работы; фамилия, имя, отчество студента; дата выполнения.

2. Постановка задачи. Следует дать конкретную постановку, т.е. указать, какой класс должен быть реализован, какие должны быть в нем конструкторы, компоненты-функции и т.д.

3. Определение пользовательского класса с комментариями.

4. Реализация конструкторов и деструктора.

5. Фрагмент программы, показывающий использование указателя на объект и указателя на функцию с объяснением.

6. Листинг основной программы, в котором должно быть указано, в каком месте и какой конструктор или деструктор вызываются.

Контрольные вопросы

 

1. Понятия class и struct?

2. Параметры видимости компонент в определении класса.

3. Что такое инкапсуляция?

4. Что такое конструктор, зачем он нужен, когда вызывается?

5. Что такое деструктор, зачем он нужен, когда вызывается?

6. В чем особенность и когда нужен конструктор копирования?

7. Операции new и delete.

8. This, его назначение и применение.

9. Inline функции;

10. Особенности работы с массивами классов.

Варианты

Описания членов - данных пользовательских классов

 

Вариант 1.

АВТОМОБИЛЬ

марка – char*

модель – char*

производитель – char*

мощность – int

стоимость – float

 

Вариант 2.

КАТАЛОГ ЭВМ

тип процессора – char*

тактовая частота – float

объем оп. памяти – int

емкость винчестера – float

 

Вариант 3.

ШКОЛА

название-char*

тип -char*

адрес - char*

количество учеников –int

количество учителей –int

 

Вариант 4.

САМОЛЕТ

марка – char*

модель – char*

производитель – char*

тип – char*

дальность полета – float

 

Вариант 5.

ТЕЛЕФОН

модель – char*

производитель – char*

стандарт – char*

стоимость – float

 

Вариант 6.

СТУДЕНТ

фамилия – char*

имя – char*

отчество– char*

курс – int

группа– char*

 

Вариант 7.

РАБОТНИК

фамилия – char*

имя – char*

отчество– char*

возраст – int

рабочий стаж – int

 

Вариант 8.

ИЗДЕЛИЕ

наименование – char*

шифр – char*

тип упаковки– char*

количество – int

 

Вариант 9.

КАДРЫ

фамилия – char*

имя – char*

отчество– char*

номер цеха – int

разряд – int

 

Вариант 10.

АДРЕС

страна – char*

город– char*

улица – char*

номер дома – int

 

Вариант 11.

КОРАБЛЬ

имя – char*

водоизмещение – int

численность команды -int

тип – char*

 

Вариант 12.

ЦЕХ

название – char*

фамилия начальника – char*

количество

работающих – int

 

Вариант 13.

КАТАЛОГ ПРИНТЕРОВ

производитель – char*

тип – char*

объем оп. памяти – int

скорость печати – float

 

Вариант 14.

СТРАНА

название – char*

форма

правления – char*

площадь – float

население – float

 

Вариант 15.

РАСТЕНИЕ

название– char*

класс – char*

среднее время жизни – int

место произрастания – char*

 

Вариант 16.

КНИЖНЫЙ МАГАЗИН

название – char*

тематика – char*

автор – char*

стоимость – float

 

Вариант 17.

ТОВАР

наименование – char*

единицы измерения – char*

количество – float

цена-float

стоимость – float

 

Вариант 18.

ПЕРСОНА

фамилия – char*

имя – char*

отчество– char*

возраст – int

пол – int(bool)

 

 

Вариант 19.

ЖИВОТНОЕ

название – char*

класс – char*

средний вес – int

страна обитания –char*

 

Вариант 20.

ЭКЗАМЕН

имя студента – char*

группа – char*

дата – int

оценка – int


Лабораторная работа № 12

 

«ПЕРЕГРУЗКА ОПЕРАЦИЙ И ФУНКЦИЙ В С++»

 

Цель. Получить практические навыки реализации перегрузки операций и функций на С++.





Поделиться с друзьями:


Дата добавления: 2016-11-02; Мы поможем в написании ваших работ!; просмотров: 1110 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2557 - | 2402 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.