Скачиваний:
29
Добавлен:
28.03.2021
Размер:
154.2 Кб
Скачать

Министерство образования Республики Беларусь

Министерство образования Республики Беларусь

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра эконмической информатики

Объектно-ориентированное программирование

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

“ ПРОСТОЕ НАСЛЕДОВАНИЕ ”

Вариант 7

Выполнила: Студентка группы

972303

Рушева Маргарита

Владиславовна

Проверила: Григорьева Юлия

Юрьевна

Минск, 2020

1 ЦЕЛЬ ЛАБОРАТОРНОЙ РАБОТЫ

Изучить понятие базовых и производных классов, основные правила построения производных классов, особенности вызова конструкторов деструкторов при наследовании.

2 ТЕОРИЯ ПО ЛАБОРАТОРНОЙ РАБОТЕ

НАСЛЕДОВАНИЕ

Представляет собой механизм получения нового класса из существующего. Именно благодаря ему возможно создание иерархических классификаций.

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

Если базовый класс наследуется как public-класс, то public-элементы базового класса становятся public-элементами производного класса; protected-элементы базового класса становятся protected-элементами производного класса, т.е. доступными для производного класса; private-элементы базового класса становятся недоступны для производного класса. Если базовый класс наследуется как private-класс, то public-элементы базового класса становятся private-элементами производного класса, protected-элементы базового класса становятся private-элементами производного класса; private-элементы базового класса становятся недоступны для производного класса.

Спецификатор доступа protected позволяет создать элемент класса, который будет доступен в рамках данной иерархии классов, но закрыт для остальных элементов программы. Если базовый класс наследуется как protected-класс, то все его открытые и закрытые элементы становятся защищенными элементами производного класса.

КОНСТРУКТОРЫ, ДЕСТРУКТОРЫ ПРОИЗВОДНЫХ КЛАССОВ

Если у базового и производного классов имеются конструкторы и деструкторы, то конструкторы выполняются в порядке наследования, а деструкторы − в обратном порядке. Конструкторы выполняются в порядке наследования классов. Деструкторы выполняются в порядке, обратном порядку наследования классов, поскольку базовый класс лежит в основе производного класса, разрушение базового класса подразумевает разрушение производного. Следовательно, деструктор производного класса имеет смысл вызвать до того, как объект будет полностью разрушен.

3 ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ

Создать классы «Пассажироперевозчик», «Самолет», «Поезд», «Автомобиль». Определить время и стоимость перевозки пассажиров. Вывести данные о наиболее быстрой и экономичной поездке.

4 КОД РЕШЕНИЯ ИНДИВИДУАЛЬНОГО ЗАДАНИЯ

#include <iostream>

using namespace std;

class Passajiroperevozchik

{//пассажироперевозчик

private:

char stoimost[80];//стоимость перевозки пассажиров

char time[80];//время перевозки пассажиров

public:

char* get_stoimost();

char* get_time();

void getData()

{

cout << "Введите стоимость перевозки пассажиров(в долларах): ";

cin >> stoimost;

cout << "Введите время перевозки пассажиров(часы): ";

cin >> time;

}

void putData() const

{

cout << "\nСтоимость: " << stoimost;

cout << "\nВремя: " << time;

}

};

char* Passajiroperevozchik::get_stoimost() { return stoimost; }

char* Passajiroperevozchik::get_time() { return time; }

class Plane :public Passajiroperevozchik

{//самолет

};

class Poezd :public Passajiroperevozchik

{//поезд

};

class Car :public Passajiroperevozchik

{

};

int main()

{

while (1)

{

setlocale(LC_ALL, "Russian");

Plane m1;

Poezd s1;

Car l1;

cout << "Ввод информации о пассажироперевозчике -- <<САМОЛЕТ>>:" << endl;

m1.getData();

cout << "\nВвод информации о пассажироперевозчике -- <<ПОЕЗД>>:" << endl;

s1.getData();

cout << "\nВвод информации о пассажироперевозчике -- <<АВТОМОБИЛЬ>>:" << endl;

l1.getData();

//выведем полученную информацию на экран

system("pause");

system("cls");

cout << "\nИнформация о пассажироперевозчике -- <<САМОЛЕТ>>:";

m1.putData();

cout << "\nИнформация о пассажироперевозчике -- <<ПОЕЗД>>:";

s1.putData();

cout << "\nИнформация о пассажироперевозчике -- <<АВТОМОБИЛЬ>>:";

l1.putData();

char* stoimost1 = new char(80);

stoimost1 = m1.get_stoimost();

char* stoimost2 = new char(80);

stoimost2 = s1.get_stoimost();

char* stoimost3 = new char(80);

stoimost3 = l1.get_stoimost();

char* time1 = new char(80);

time1 = m1.get_time();

char* time2 = new char(80);

time2 = s1.get_time();

char* time3 = new char(80);

time3 = l1.get_time();

int sstoimost1 = atoi(stoimost1);

int sstoimost2 = atoi(stoimost2);

int sstoimost3 = atoi(stoimost3);

int ttime1 = atoi(time1);

int ttime2 = atoi(time2);

int ttime3 = atoi(time3);

int min;

int max;

if ((sstoimost1 < sstoimost2) && (sstoimost1 < sstoimost3)) min = sstoimost1;

else if ((sstoimost2 < sstoimost1) && (sstoimost2 < sstoimost3)) min = sstoimost2;

else min = sstoimost3;

if ((ttime1 < ttime2) && (ttime1 < ttime3)) max = ttime1;

else if ((ttime2 < ttime1) && (ttime2 < ttime3)) max = ttime2;

else max = ttime3;

cout << "\n******************" << endl;

if (min == sstoimost1)

{

cout << "\nСпособ передвижения -- <<САМОЛЕТ>> ";

cout << "\nИнформация о самой экономичной поездке: ";

m1.putData();

}

if (min == sstoimost2)

{

cout << "\nСпособ передвижения -- <<ПОЕЗД>> ";

cout << "\nИнформация о самой экономичной поездке: ";

s1.putData();

}

if (min == sstoimost3)

{

cout << "\nСпособ передвижения -- <<САМОЛЕТ>> ";

cout << "\nИнформация о самой экономичной поездке: ";

l1.putData();

}

if (max == ttime1)

{

cout << "\nСпособ передвижения -- <<АВТОМОБИЛЬ>> ";

cout << "\nИнформация о самой быстрой поездке: ";

m1.putData();

}

if (max == ttime2)

{

cout << "\nСпособ передвижения -- <<ПОЕЗД>> ";

cout << "\nИнформация о самой быстрой поездке: ";

s1.putData();

}

if (max == ttime3)

{

cout << "\nСпособ передвижения -- <<АВТОМОБИЛЬ>> ";

cout << "\nИнформация о самой быстрой поездке: ";

l1.putData();

}

int q;

cout << "\n******************" << endl;

cout << "\nХотите продолжить ввод данных?" << endl;

cout << "1 - да" << endl;

cout << "2 - нет, выйти" << endl;

cout << "Ваш выбор:" << endl;

cin >> q;

if (q == 1)

{

continue;

}

else if (q == 2)

{

break;

}

}

return 0;

}

5 СКРИНШОТЫ ВЫПОЛНЕНИЯ ИНДИВИДУАЛЬНОГО ЗАДАНИЯ

ВЫВОДЫ

В ходе выполнения лабораторной работы было изучено понятие базовых и производных классов, основные правила построения производных классов и особенности вызова конструкторов деструкторов при наследовании. Работа над лабораторной работой позволила научится работать с базовыми и производными классами. Была разработана программа с использованием новых понятий, изученных в лабораторной работе.

Соседние файлы в папке лабы салапура