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

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

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

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

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

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

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

Лабораторная работа №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 СКРИНШОТЫ ВЫПОЛНЕНИЯ ИНДИВИДУАЛЬНОГО ЗАДАНИЯ

ВЫВОДЫ

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

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