Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
15_наследование_14.doc
Скачиваний:
14
Добавлен:
10.04.2019
Размер:
612.35 Кб
Скачать

Пример программирования

Пример 15.2. Написать программу с наследованием класса стек от класса массив.

#include "stdafx.h"

#include <iostream>

#include <stdlib.h>

#include <time.h>

#include <conio.h>

using namespace std;

class massiv

{ int *num;

int kol;

public:

massiv(int n);

void print();

virtual int kolich(){return kol;}

void put(int k,int n){num[k]=n;}

~massiv(){delete num;}

};

massiv::massiv(int n)

{ num=new int[n];

kol=n;

for(int i=0;i<kol;i++) num[i]=rand()%100-50;

}

void massiv::print()

{ for(int i=0;i<kolich();i++) cout<<num[i]<<" ";

cout<<endl;

}

class stec:public massiv

{ int top;

public:

stec(int);

virtual int kolich() {return top;}

void pop(int k);

};

stec::stec(int n):massiv(n)

{ top=0;

}

void stec::pop(int k)

{ put(top++,k); }

int _tmain(int argc, _TCHAR* argv[])

{

srand((unsigned)time(NULL));

massiv a(10);

a.print();

stec b(10);

b.pop(rand()%100-50);

b.pop(rand()%100-50);

b.pop(rand()%100-50);

b.print();

_getch();

return 0;

}

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

Пример 15.3.

#include "stdafx.h"

#include <conio.h>

#include <iostream>

using namespace std;

class Base

{ public:

Base(){};

void Print(){ cout<<"I’m a Base print"<<endl;}

virtual void View(){ cout<<"I’m a Base view"<<endl;}

};

class Derived: public Base

{ public:

Derived(){};

void Print(){ cout<<"I’m a Derived print"<<endl;}

void View(){ cout<<"I’m a Derived view"<<endl;}

};

int _tmain(int argc, _TCHAR* argv[])

{ Base *A=new Base;

Derived *B=new Derived;

Base *C;

A->Print();

A->View();

B->Print();

B->View();

C=(Base *)B;

C->Print();

C->View();

_getch();

return 0;

}

Результат:

“I’m a Base print”

“I’m a Base view”

“I’m a Derived print”

“I’m a Derived view”

“I’m a Base print”

“I’m a Derived view”

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

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

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

  2. Какой класс называется производным?

  3. Какие ключи доступа используются при наследовании?

  4. Наследуются ли конструкторы?

  5. Наследуются ли деструкторы?

  6. Что собой представляет виртуальная функция?

  7. Можно ли виртуальную функцию объявить как static?

Варианты заданий

Таблица 15.2 содержит более простые задания, таблица 15.3 – более сложные.

Таблица 15.2

Номер варианта

Задание

1, 16

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

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

2, 17

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

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

3, 18

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

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

4, 19

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

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

5, 20

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

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

6, 21

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

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

7, 22

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

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

8, 23

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

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

9, 24

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

Используя виртуальные функции, выведите на экран его характеристики.

10, 25

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

Используя виртуальные функции, выведите на экран его характеристики.

11, 26

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

Используя виртуальные функции, выведите на экран его характеристики.

12, 27

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

Используя виртуальные функции, выведите на экран его характеристики.

13, 28

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

Используя виртуальные функции, выведите на экран его характеристики.

14, 29

Р

Дом

(из какого материала, частный или аренда)

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

Жилище

(название, общая площадь)

Коттедж

(площадь земельного участка, количество этажей

Юрта

(на какое количество жителей

Используя виртуальные функции, выведите на экран его характеристики.

15, 30

Р

Море

(внутреннее или нет, замерзает ли зимой)

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

Водоем

(название, максимальная глубина

Озеро

(соленое или пресное, площадь поверхности)

Река

(горная или равнинная, протяженность)

Используя виртуальные функции, выведите на экран его характеристики.

Таблица 15.3

Номер варианта

Задание

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

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

  • человек (имя, дата рождения);

  • рабочий (имя, возраст, пол, место работы, стаж);

  • профессор (имя, возраст, пол, образование, место работы);

  • инженер (имя, возраст, пол, образование, место работы, тема научной работы).

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