OOP7
.docxМіністерство освіти і науки України
Запорізький національний технічний університет
Кафедра програмних засобів
Звіт
з лабораторної роботи №7
«Введення в узагальнене програмування»
Виконав
ст. гр. КНТ-423 В.В. Білевський
Прийняв
ст. викл. Н. О. Миронова
Запоріжжя, 2014
7.1Мета роботи: Навчитись використовувати шаблони при розробці програм.
7.2 Завдання до роботи: Виконати завдання з лабораторної роботи № 1, де тип елементу заданої структури даних довільний. Використати шаблонні функції.
7.3 Текст програми:
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
template <class Q>
class Vector{
Q x,y,z;
public:
Vector();
Vector(Q a, Q b, Q c);
void Vvod();
void Dlina();
void Show(){cout << x <<' '<< y<<' '<< z<<endl;}
template <typename I>
friend Vector<I> operator + (Vector<I> &a, Vector<I> &c);
template <typename I>
friend Vector<I> operator + (I num, Vector<I> &a);
template <typename I>
friend Vector<I> operator - (Vector<I> &a, Vector<I> &c);
template <typename I>
friend Vector<I> operator - (Vector<I> &a, I num);
template <typename I>
friend Vector<I> operator * (Vector<I> &a, Vector<I> &c);
template <typename I>
friend Vector<I> operator * (Vector<I> &a, I num);
template <typename I>
friend bool operator == (Vector<I> &a, Vector<I> &b);
template <typename I>
friend bool operator != (Vector<I> &a, Vector<I> &b);
};
template <class Q>
Vector <Q>::Vector(){
x=0;y=0;z=0;
}
template <class Q>
Vector <Q>::Vector(Q a, Q b, Q c){
x=a;y=b;z=c;
}
template <class Q>
void Vector <Q>::Dlina(){
double dlina = sqrt(x*x+y*y+z*z);
cout << "Dlina vectora: "<<dlina<< endl;
}
template <class Q>
void Vector<Q>::Vvod(){
cout << "Vvedite koordinati:\nx = ";
cin >> x;
cout << "y = ";
cin >> y;
cout << "z = ";
cin >> z;
}
template <class Q>
Vector <Q> operator +(Vector<Q> &a, Vector<Q> &c){
Vector<Q> b;
b.x=a.x+c.x;
b.y+=a.y+c.y;
b.z+=a.z+c.z;
return b;
}
template <class Q>
Vector<Q> operator +(Q num, Vector<Q>& a){
Vector<Q> b;
b.x = a.x +num;
b.y = a.y +num;
b.z = a.z +num;
return b;
}
template <class Q>
Vector<Q> operator -(Vector<Q> &a, Vector <Q>&c){
Vector<Q> b;
b.x=a.x-c.x;
b.y+=a.y-c.y;
b.z+=a.z-c.z;
return b;
}
template <class Q>
Vector<Q> operator -(Vector<Q>& a, Q num){
Vector<Q> b;
b.x = a.x -num;
b.y = a.y -num;
b.z = a.z -num;
return b;
}
template <class Q>
Vector<Q> operator *(Vector<Q> &a, Vector<Q> &c){
Vector<Q> b;
b.x=a.x*c.x;
b.y=a.y*c.y;
b.z=a.z*c.z;
return b;
}
template <class Q>
Vector<Q> operator *(Vector<Q>& a, Q num){
Vector<Q> b;
b.x = a.x *num;
b.y = a.y *num;
b.z = a.z *num;
return b;
}
template <class Q>
bool operator == (Vector<Q> &a, Vector <Q>&b){
bool zn;
if(a.x==b.x&&a.y==b.y&&a.z==b.z)
zn=true;
return zn;
}
template <class Q>
bool operator != (Vector<Q> &a, Vector <Q> &b){
bool zn;
if(a.x!=b.x||a.y!=b.y||a.z!=b.z)
zn=true;
return zn;
}
int main()
{
Vector<int> obj1, obj2(1,2,3), obj3;
obj1.Vvod();
obj3=obj1+obj2;
obj3.Show();
obj3=2+obj1;
obj3.Show();
obj3=obj2-obj1;
obj3.Show();
obj3=obj2-4;
obj3.Show();
obj3=obj1*obj1;
obj3.Show();
obj3=obj2*3;
obj3.Show();
if(obj1==obj2)
cout << "Vektora ravny\n";
else cout<<"Vektora ne ravny\n";
if(obj1!=obj2)
cout << "Vektora ne ravny\n";
else cout<<"Vektora ravny\n";
obj1.Dlina();
getch();
return 0;
}
7.4 Знімки з єкрану:
Рисунок 7.1- Робота програми