Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_cpp.doc
Скачиваний:
10
Добавлен:
07.06.2015
Размер:
2.81 Mб
Скачать

Контрольные вопросы для подготовки и самостоятельной работы

  1. Что означает оператор (::)?

  2. Что означает понятие наследования?

  3. Какой класс называется базовым?

  4. Какой класс является наследником?

  5. Сколько базовых классов может быть у производного класса?

  6. Может производный класс быть базовым?

  7. Можно ли задавать спецификаторы для базовых классов при наследовании (объявление произвольного класса)?

  8. Как изменяется доступ к элементам базового класса при наследовании с различными спецификаторами доступа: из разделов класса, из программы, из других классов?

  9. В чём разница между простым и множественным наследованием?

  10. Что означает выражение «неполное объявление» класса?

  11. Можно ли уточнить доступ к членам базового класса в производном классе? Как это осуществляется?

  12. Какие функции называются друзьями класса?

  13. Как объявляются и определяются функции–друзья класса?

  14. Может ли класс быть дружественным?

  15. Могут ли два класса быть друзьями друг другу?

  16. Можно ли из класса-наследника получить доступ к private части базового класса, если спецификатор доступа при наследовании private ?

Таблица 22.1 - Варианты понятий для базовых классов

Вариант

Понятие

Вариант

Понятие

1

Растения

15

Мебель

2

Животные

16

Строения

3

Небесные тела

17

Мосты

4

Спортивные соревнования

18

Бритвы

5

Печатная продукция

19

Принтеры

6

Промышленное производство

20

Плоттеры

7

Телефоны

21

Разъёмы электрические

8

Железнодорожно-транспортные средства

22

Манипуляторы для ввода информации

9

Автомобильный транспорт

23

Устройства записи информации

10

Осветительные приборы

24

Сканеры

11

Средства связи

25

ЭВМ

12

Телевизоры

26

Нагревательные устройства

13

Корабли

27

Устройства передачи крутящего момента

14

Мебель мягкая

28

Лабораторная работа №23 Использование виртуальных и указателей для работы с объектами классов (2 часа)

Цель работы: изучить и научиться использовать виртуальные функции в языке С.

Теоретические сведения

Виртуальные функции-члены объявляются в классе c ключевым словом virtual.

Если базовый класс (БК) base содержит виртуальную функцию (virtual) vf () и производный класс (ПК) derived также содержит эту функцию, то при вызове функции vf() для объекта базового класса мы получим base:: vf(), а для объекта производного класса мы получаем derived::vf(). Например:

Базовый класс

Производный класс

struct base

{…..

virtual void vf (void);

void f (void);

};

base_1

class

{…

public:

virtual void vf(void)=0

void f(void);

};

struct derived : public base

{…..

virtual void vf (void);

// virtual в последнем

// ПК можно опустить

void f (void);

};

derived d; // объект производ-

// ного класса

d.vf(); // вызов функции класса d

// erived::vf()

d.f(); // вызов функции класса

// derived::f()

base* bp = &d; // указатель на

// БК адресует объект ПК

bp->vf (); // вызов виртуальной

// функции derived::vf()

bp->f (); // вызов функции-члена

// класса base

// base:: f()

Тип объектов классов с виртуальными функциями определяется во время выполнения программы.

Поэтому при вызовах с помощью указателя bp на БК функций vf() и f() для объекта ПК с именем d вызываются, соответственно, derived::vf(), но base::vf(). Вызов нужной виртуальной функции vf() зависит от типа объекта, для которого она вызывается (derived d), в то время как вызов невиртуальной функции f() зависит только от типа указателя (base*bp), адресующего данный объект.

Если производный класс содержит функцию с тем же именем, что и имя виртуальной функции в базовом классе, то они должны иметь один и тот же тип. Функция vf() в ПК от БК, в котором содержится виртуальная функция vf(), также считается виртуальной. Виртуальная функция может быть определена в базовом классе. Виртуальную функцию, которая уже определена в базовом классе, в производном классе можно не определять. В этом случае при использовании указателя на БК для адресации ПК при всех обращениях используется функция, определенная в базовом классе. Если виртуальная функция в классе заканчивается нулём (=0), то она называется чистой виртуальной функцией. Чистая виртуальная функция не имеет определения в базовом классе, но определяется в производных. Класс, содержащий хотя бы одну такую функцию, называется абстрактным. Нельзя создать объект абстрактного класса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]