Advertisement
Guest User

Untitled

a guest
Apr 16th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. using namespace std;
  7.  
  8. template <class T>
  9. class Para {
  10.     public:
  11.     T x, y;
  12.    
  13.     Para<T> & operator = (Para<T> &o1) {
  14.         x = o1.x;
  15.         y = o1.y;
  16.         return *this;
  17.     }
  18.    
  19.     Para<T> & operator + (Para<T> &o2) {
  20.         static Para<T> wynik;
  21.         wynik.x = this->x + o2.x;
  22.         wynik.y = this->y + o2.y;
  23.         return wynik;
  24.     }
  25. };
  26.  
  27. class Macierze {
  28.     friend ostream &operator << (ostream &s1, Macierze &o1);
  29.     friend istream &operator >> (istream &s1, Macierze &o1);
  30.     double *wsk;
  31.     int wymiar;
  32.    
  33. public:
  34.     Macierze() {            //konstruktor
  35.         wsk = NULL;         //wartość niekoniecznie równa 0
  36.         wymiar = 0;
  37.     };
  38.  
  39.      ~Macierze(){           //destruktor
  40.          if (wsk != NULL)
  41.             delete [] wsk;
  42.             wsk = NULL;
  43.             wymiar = 0;
  44.     };
  45.  
  46.     Macierze & operator = (const Macierze &o1) {
  47.         if (this == &o1) {
  48.             return *this;
  49.         }
  50.         //zwolnić obszar
  51.         if (this->wsk != NULL)
  52.             delete [] this->wsk;
  53.         //zarezerwować nowy obszar
  54.         this->wsk = new double [o1.wymiar*o1.wymiar];
  55.         //elementy przepisać
  56.         this->wymiar = o1.wymiar;
  57.         for (int x=0; x < this->wymiar*this->wymiar; x++) {
  58.             this->wsk[x] = o1.wsk[x];
  59.         }
  60.         return *this;           // wskaźnik do obiektu na którym operujemy
  61.     };
  62.  
  63.     Macierze (Macierze &o1) {
  64.         this->wsk = new double [o1.wymiar*o1.wymiar];
  65.         //elementy przepisać
  66.         this->wymiar = o1.wymiar;
  67.         for (int x=0; x < this->wymiar*this->wymiar; x++) {
  68.             this->wsk[x] = o1.wsk[x];
  69.         }        
  70.     };
  71.  
  72.     Macierze operator + (Macierze &o2) {
  73.         Macierze wynik;
  74.         wynik.wymiar = o2.wymiar;
  75.         wynik.wsk = new double [wynik.wymiar*wynik.wymiar];
  76.         for (int x=0; x < o2.wymiar*o2.wymiar; x++) {
  77.             wynik.wsk[x] = this->wsk[x] + o2.wsk[x];
  78.         }
  79.         return wynik;
  80.     };
  81. };
  82.  
  83. template <class T>
  84. istream &operator >> (istream &s1, Para<T> &o1) {
  85.     s1 >> o1.x >> o1.y;
  86.     return s1;
  87. }
  88.  
  89. template <class T>
  90. ostream &operator << (ostream &s1, Para<T> &o1) {
  91.     s1 << o1.x << " " << o1.y;
  92.     return s1;
  93. }
  94.  
  95. istream &operator >> (istream &s1, Macierze &o1) {
  96.         if (o1.wsk != NULL) //zajęte, więc trzeba zwolnić
  97.             delete [] o1.wsk;
  98.         s1 >> o1.wymiar; //stream size
  99.         if (o1.wymiar < 1) {
  100.             o1.wsk = NULL;
  101.             o1.wymiar = 0;
  102.             return s1;
  103.         }
  104.         o1.wsk = new double [o1.wymiar*o1.wymiar]; //create new array
  105.         for (int x=0; x < o1.wymiar*o1.wymiar; x++) {
  106.                 s1 >> o1.wsk[x]; //stream variables
  107.         }
  108.         return s1;            
  109.  }
  110.  
  111. ostream &operator << (ostream &s1, Macierze &o1) {
  112.         if (o1.wsk != NULL) {
  113.             for (int x=0; x < o1.wymiar*o1.wymiar; x++) {
  114.                 if (x%o1.wymiar == 0)
  115.                     s1 << endl; //end line
  116.                 s1 << o1.wsk[x]; //out
  117.             }
  118.         }
  119.     return s1;
  120. }
  121.  
  122. int main(){
  123.     Para<int> a, b, c;
  124.     cin >> a >> b;
  125.     c=a+b;
  126.     cout << c;
  127.    
  128.     Para<Macierze> d, e, f;
  129.     cin >> d >> e;
  130.     f=d+e;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement