Міністерство освіти і науки України
Національний університет „Львівська політехніка”
ІКНІ
Кафедра ІСМ
Звіт
Про виконання лабораторної роботи №6
«Множинне успадкування класів»
з дисципліни «Об’єктно-орієнтоване програмування»
25 варіант
Львів 2019
Мета роботи: здобуття практичних навичок використання множинного
успадкування класів.
Завдання:
/
Код програми:
#include <iostream>
using namespace std;
class E1
{
protected:
int x, px;
public:
E1()//конструктор ініціалізації
{
this->x = 0;
this->px = 0;
}
E1(E1& object)//конструктор копіювання
{
this->x = object.x;
this->px = object.px;
}
int GetX()//метод читання
{
return this->x;
}
int GetPX()//метод читання
{
return this->px;
}
void SetX(int x)//метод встановлення
{
this->x = x;
}
void SetPX(int PX) //метод встановлення
{
this->px = PX;
}
~E1() {}//деструктор
friend ostream& operator <<(ostream& out, E1& object)//перевантаження операції виведення
{
out << "E1:\t\t[" << object.x << ";" << object.px << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, E1& object)//перевантаження операції вводу
{
cout << "Введiть x E1\t";
in >> object.x;
object.SetX(object.x);//виклик сеттеру
cout << "Введiть px E1\t";
in >> object.px;
object.SetPX(object.px);//виклик сеттеру
return in;
}
};
class D2 : public E1
{
public:
D2() :E1() {} //конструктор ініціалізації
D2(D2& object) :E1(object) {}//конструктор копіювання
void SetX(E1& object)//метод встановлення
{
this->x = object.GetX();
}
void SetPX(E1& object)//метод встановлення
{
this->px = object.GetPX();
}
int GetX()//метод читання
{
return this->x;
}
int GetPX()//метод читання
{
return this->px;
}
~D2() {}//дестурктор
friend ostream& operator <<(ostream& out, D2& object)//перевантажена операція виводу
{
out << " D2:\t\t[" << object.x << ";"
<< object.px << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, D2& object)//перевантажена операція вводу
{
cout << "Введiть x точки D2\t";
in >> object.x;
cout << "Введiть px точки D2\t";
in >> object.px;
return in;
}
};
class C2 : protected virtual D2//успадкування класу
{
public:
C2() :D2() {}//конструктор ініціалізації
C2(C2& object) :D2(object) {}//конструктор копіювання
void SetX(C2& object)//метод встановлення
{
this->x = object.GetX();
}
void SetPX(C2& object)//метод встановлення
{
this->px = object.GetPX();
}
int GetX()//метод читання
{
return this->x;
}
int GetPX()//метод читання
{
return this->px;
}
~C2() {}//деструктор
friend ostream& operator <<(ostream& out, C2& object)//перевантажена операція виводу
{
out << " C2:\t\t[" << object.x << ";"
<< object.px << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, C2& object)//перевантажена операція вводу
{
cout << "Введiть x точки C2\t";
in >> object.x;
cout << "Введiть xp точки C2\t";
in >> object.px;
return in;
}
};
class C3 :public virtual D2//успадкування класу
{
public:
C3() :D2() {}//конструктор ініціалізації
C3(C3& object) :D2(object) {}//конструктор копіювання
void SetX(C3& object)//метод встановлення
{
this->x = object.GetX();
}
void SetPX(C3& object)//метод встановлення
{
this->px = object.GetPX();
}
int GetX()//метод читання
{
return this->x;
}
int GetPX()//метод читання
{
return this->px;
}
~C3() {}//деструктор
friend ostream& operator <<(ostream& out, C3& object)//перевантажена операція виводу
{
out << " C3:\t[" << object.x << ";"
<< object.px << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, C3& object)//перевантажена операція вводу
{
cout << "Введiть x точки C3\t";
in >> object.x;
cout << "Введiть xp точки C3\t";
in >> object.px;
return in;
}
};
class C1//успадкування класу
{
protected://ініціалізація захищених даних для успадкування
int xc1;
int pxc1;
public:
C1() { //коструктор ініціалізації
this->xc1 = 0;
this->pxc1 = 0;
}
C1(C1& object)//конструктор копіювання
{
this->xc1 = object.xc1;
this->pxc1 = object.pxc1;
}
void SetX(C1& object)//метод встановлення
{
this->xc1 = object.GetX();
}
void SetPX(C1& object)//метод встановлення
{
this->pxc1 = object.GetPX();
}
int GetX()//метод читання
{
return this->xc1;
}
int GetPX()//метод читання
{
return this->pxc1;
}
~C1() {}//деструктор
friend ostream& operator <<(ostream& out, C1& object)//перевантаження операції виводу
{
out << "C1:\t\t[" << object.xc1 << ";"
<< object.pxc1 << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, C1& object)//перевантаження операції вводу
{
cout << "Введiть x точки C1\t";
in >> object.xc1;
cout << "Введiть px точки C1\t";
in >> object.pxc1;
return in;
}
};
class B1: protected virtual C1, private virtual C2 //успадкування класiв
{
public:
B1() //конструктор ініціалізації
{
x = 0;
px = 0;
xc1 = 0;
pxc1 = 0;
}
B1(B1& object) //конструктор копіювання
{
this->x = object.x;
this->px = object.px;
this->xc1 = object.xc1;
this->pxc1 = object.pxc1;
}
void SetX(C1& objectc1,C2& objectc2) //метод встановлення
{
this->x = objectc2.GetX();
this->xc1 = objectc1.GetX();
}
void SetPX(C1& objectc1, C2& objectc2)//метод встановлення
{
this->px = objectc2.GetPX();
this->pxc1 = objectc1.GetPX();
}
int GetX()//метод читання
{
return this->x;
return this->xc1;
}
int GetPX()//метод читання
{
return this->px;
return this->pxc1;
}
~B1() {}//деструктор
friend ostream& operator <<(ostream& out, B1& object) //перевантажена операція виводу
{
out << " B1:\t\t[" << object.x << ";"
<< object.px << "]" << endl;
out << " B1 (c1):\t\t[" << object.xc1 << ";"
<< object.pxc1 << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, B1& object) //перевантажена операція вводу
{
cout << "Введiть x точки B1\t";
in >> object.x;
cout << "Введiть xc1 точки B1\t";
in >> object.xc1;
cout << "Введiть px точки B1\t";
in >> object.px;
cout << "Введiть pxc1 точки B1\t";
in >> object.pxc1;
return in;
}
};
class B2 : public virtual C1, public virtual C2 , protected virtual C3 //успадкування класiв
{
public:
B2() //конструктор ініціалізації
{
x = 0;
px = 0;
xc1 = 0;
pxc1 = 0;
}
B2(B2& object) //конструктор копіювання
{
this->x = object.x;
this->px = object.px;
this->xc1 = object.xc1;
this->pxc1 = object.pxc1;
}
void SetX(C1& objectc1, C2& objectc2) //метод встановлення
{
this->x = objectc2.GetX();
this->xc1 = objectc1.GetX();
}
void SetPX(C1& objectc1, C2& objectc2)//метод встановлення
{
this->px = objectc2.GetPX();
this->pxc1 = objectc1.GetPX();
}
int GetX()//метод читання
{
return this->x;
return this->xc1;
}
int GetPX()//метод читання
{
return this->px;
return this->pxc1;
}
~B2() {}//деструктор
friend ostream& operator <<(ostream& out, B2& object) //перевантажена операція виводу
{
out << " B2:\t\t[" << object.x << ";"
<< object.px << "]" << endl;
out << " B2 (c1):\t[" << object.xc1 << ";"
<< object.pxc1 << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, B2& object) //перевантажена операція вводу
{
cout << "Введiть x точки B2\t";
in >> object.x;
cout << "Введiть xc1 точки B2\t";
in >> object.xc1;
cout << "Введiть px точки B2\t";
in >> object.px;
cout << "Введiть pxc1 точки B2\t";
in >> object.pxc1;
return in;
}
};
class B3 : protected virtual C2, private virtual C3 //успадкування класу
{
public:
B3() :C3() {}//конструктор ініціалізації
B3(B3& object) :C3(object) {}//конструктор копіювання
void SetX(B3& object)//метод встановлення
{
this->x = object.GetX();
}
void SetPX(B3& object)//метод встановлення
{
this->px = object.GetPX();
}
int GetX()//метод читання
{
return this->x;
}
int GetPX()//метод читання
{
return this->px;
}
~B3() {}//деструктор
friend ostream& operator <<(ostream& out, B3& object)//перевантажена операція виводу
{
out << " B3:\t\t[" << object.x << ";"
<< object.px << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, B3& object)//перевантажена операція вводу
{
cout << "Введiть x точки B3\t";
in >> object.x;
cout << "Введiть xp точки B3\t";
in >> object.px;
return in;
}
};
class A2 : public B1, private B2, public B3//успадкування класу
{
public:
A2() : B1() {}//конструктор ініціалізації
A2(A2& object)//констурктор копіювання
{
this->x = object.x;
this->xc1 = object.xc1;
this->px = object.px;
this->pxc1 = object.pxc1;
}
void SetX(B2& objectB2, B3& objectB3)//метод встановлення
{
this->x = objectB2.GetX();
this->xc1 = objectB3.GetX();
}
void SetY(B2& objectB2, B3& objectB3)//метод встановлення
{
this->px = objectB2.GetPX();
this->pxc1 = objectB3.GetPX();
}
int GetX()//метод читання
{
return this->x;
return this->xc1;
}
int GetY()//метод читання
{
return this->px;
return this->pxc1;
}
~A2() {}//деструктор
friend ostream& operator <<(ostream& out, A2& object) //перевантажена операція виводу
{
out << " A2:\t\t[" << object.x << ";"
<< object.px << "]" << endl;
out << " A2 (b1):\t[" << object.xc1 << ";"
<< object.pxc1 << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, A2& object)//перевантажена операція вводу
{
cout << "Введiть x точки A2\t";
in >> object.x;
cout << "Введiть xc1 точки A2\t";
in >> object.xc1;
cout << "Введiть px точки A2\t";
in >> object.px;
cout << "Введiть pxc1 точки A2\t";
in >> object.pxc1;
return in;
}
};
class A3 : public B2, protected B3//успадкування класу
{
public:
A3() : B2() {}//конструктор ініціалізації
A3(A3& object)//констурктор копіювання
{
this->x = object.x;
this->xc1 = object.xc1;
this->px = object.px;
this->pxc1 = object.pxc1;
}
void SetX(B2& objectB2)//метод встановлення
{
this->x = objectB2.GetX();
this->xc1 = objectB2.GetX();
}
void SetPX(B2& objectB2)//метод встановлення
{
this->px = objectB2.GetPX();
this->pxc1 = objectB2.GetPX();
}
int GetX()//метод читання
{
return this->x;
return this->xc1;
}
int GetPX()//метод читання
{
return this->px;
return this->pxc1;
}
~A3() {}//деструктор
friend ostream& operator <<(ostream& out, A3& object) //перевантажена операція виводу
{
out << " A3:\t\t[" << object.x << ";"
<< object.px << "]" << endl;
out << " A3 (b1):\t[" << object.xc1 << ";"
<< object.pxc1 << "]" << endl;
return out;
}
friend istream& operator >>(istream& in, A3& object)//перевантажена операція вводу
{
cout << "Введiть x точки A3\t";
in >> object.x;
cout << "Введiть xc1 точки A3\t";
in >> object.xc1;
cout << "Введiть px точки A3\t";
in >> object.px;
cout << "Введiть pxc1 точки A3\t";
in >> object.pxc1;
return in;
}
};
int main()
{
setlocale(LC_ALL, "ukr");
E1 e1;
cin >> e1;
cout << e1;
D2 d2;
cin >> d2;
cout << d2;
C1 c1;
cin >> c1;
cout << c1;
C2 c2;
cin >> c2;
cout << c2;
C3 c3;
cin >> c3;
cout << c3;
B1 b1;
cin >> b1;
cout << b1;
B2 b2;
cin >> b2;
cout << b2;
B3 b3;
cin >> b3;
cout << b3;
A2 a2;
cin >> a2;
cout << a2;
A3 a3;
cin >> a3;
cout << a3;
cout << endl << endl << "Iнформацiя успадкувань" << endl << endl;
cout << e1 << endl << d2 << endl << c1 << endl << c2 << endl;
cout << c3 << endl << a2 << endl << a3;
system("pause");
return 0;}
Результати виконання програми:
Ініціалізація об’єктів класів
Вивід інформації про об’єкти
Висновок: на цій лабораторній роботі я здобув практичні навички використання
множинного успадкування класів.