лабы салапура / ооп лаба 6
.docxМинистерство образования Республики Беларусь
Министерство образования Республики Беларусь
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра эконмической информатики
Объектно-ориентированное программирование
Лабораторная работа №6
“ МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ, ВИРТУАЛЬНОЕ НАСЛЕДОВАНИЕ”
Вариант 7
Выполнила: Студентка группы
972303
Рушева Маргарита
Владиславовна
Проверила: Григорьева Юлия
Юрьевна
Минск, 2020
1 ЦЕЛЬ ЛАБОРАТОРНОЙ РАБОТЫ
Изучить принципы и получить практические навыки при использовании множественного наследования; рассмотреть случаи, когда необходимо использовать виртуальное наследование.
2 ТЕОРИЯ ПО ЛАБОРАТОРНОЙ РАБОТЕ
В языке С++ имеется возможность образовывать производный класс от нескольких базовых классов. Общая форма такого наследования имеет вид:
class имя_произв_кл : имя_базового_кл 1,…,имя_базового_кл N {
содержимое класса
};
class A{…};
class B{…};
class C: public A, public B {…};
Иерархическая структура, в которой производный класс наследуется от нескольких базовых классов, называется множественным наследованием.
При применении множественного наследования возможно возникновение нескольких конфликтных ситуаций. Первая − конфликт имен методов или атрибутов нескольких базовых классов. Вторая проблема возникает при многократном включении некоторого базового класса. Проблема состоит в том, что при создании объекта класса D создаются два (одинаковых) объекта базового класса A (для объектов класса B и C соответственно). Решение этой проблемы состоит в использовании виртуального наследования (virtual inheritance):
class B : virtual public A
{
// компоненты класса В
}
class C : virtual public A
{
// компоненты класса C
}
Виртуальное наследование базового класса гарантирует, что в любом производном классе будет присутствовать только одна его копия. Применение оператора "::" позволяет программе "ручным способом" выбрать версию класса.
ЧТЕНИЕ ГРАФОВ НАСЛЕДОВАНИЯ
Согласно стилевой графике C++ стрелка должна указывать на базовый класс. Следовательно, стрелка означает "выведен из", а не "порождает".
3 ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ
Построить иерархию классов согласно схеме наследования, приведенной на рисунке ниже, по любой предметной области. Каждый класс должен содержать необходимые конструкторы и методы работы с полями классов. Функция main() должна иллюстрировать работу с объектами всех созданных классов.
4 КОД РЕШЕНИЯ ИНДИВИДУАЛЬНОГО ЗАДАНИЯ
#include <iostream>
using namespace std;
class B1
{
public:
int a;
B1()
{
a = 50;
};
void VA()
{
cout << "Класс B1 является базовым." << endl<< "a = " << a << endl;
cout << "==========================================" << endl;
};
};
class B2
{
public:
int b;
B2()
{
b = 100;
};
void VB()
{
cout << "Класс B2 является базовым." << endl << "b = " << b << endl;
cout << "==========================================" << endl;
};
};
class D1 : private B2, public B1
{
public:
int c;
D1()
{
c = a + b;
};
void SUM()
{
cout<< "Класс D1 наследован от B2 и B1." << endl << "Сумма a и b равна " << c << endl;
cout << "==========================================" << endl;
};
};
class D2 : private D1
{
public:
int z;
D2()
{
z = c * c;
};
void KvSum()
{
cout << "Класс D2 наследован от D1."<<endl<< "Перемножение c и c равно " << z << endl;
cout << "==========================================" << endl;
};
};
class D3 : public D2
{
public:
int r;
D3()
{
r = z / 1000;
};
void LAST()
{
cout << "Класс D3 наследован от D2." <<endl<< "Результат деления константы z на 1000 = " << r << endl;
cout << "==========================================" << endl;
};
};
int main()
{
setlocale(LC_ALL, "Rus");
cout << "Все данные были реализованы с помощью конструкторов и констант\n\n" << endl;
D1 d1;
B1 b1;
B2 b2;
D2 d2;
D3 d3;
b1.VA();
b2.VB();
d1.SUM();
d2.KvSum();
d3.LAST();
return 0;
}
5 СКРИНШОТЫ ВЫПОЛНЕНИЯ ИНДИВИДУАЛЬНОГО ЗАДАНИЯ
ВЫВОДЫ
В ходе выполнения лабораторной работы были изучены принципы использования множественного и виртуального наследования. Были рассмотрены случаи, когда необходимо использовать виртуальное наследование. Работа над лабораторной работой позволила получить практические навыки при использовании множественного наследования. Была разработана программа с использованием новых понятий, изученных в лабораторной работе.