SHARE
TWEET

Punkt

a guest Dec 7th, 2019 116 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. class Punkt {
  4.  
  5.   public:
  6.     int x;
  7.     int y;
  8.  
  9.   Punkt() {
  10.     // DEFAULT constructor
  11.   }
  12.  
  13.   Punkt(int x, int y) {
  14.     this->x = x;
  15.     this->y = y;
  16.   }
  17.  
  18.   /*
  19.   ========================================================================================
  20.  
  21.   1. Zeby zmodyfikowac jakis obiekt w srodku metody i zeby bylo to widoczne po wyjsciu z tej
  22.   metody to musi on byc wskaznikiem (adresem)
  23.  
  24.   W przeciazaniu operatorow w takiej sytuacji, gdy zmieniamy wartosc 'thisa' to
  25.   zwracany typ zatem musi wskaznikiem, dlatego oznaczamy go albo '*' albo '&'
  26.  
  27.   2. Pierwszy argument moze byc pominiety, jest domniemany jezeli chodzi o aktualny obiekt np.
  28.  
  29.   p = p + 5
  30.  
  31.   To operator = nie potrzebuje takiej definicji
  32.   operator+(Punkt p, int x)
  33.   Pierwszy argument mozna pominac i zrobic to tak:
  34.   operator+(int x)
  35.  
  36.   Inaczej jest jak mamy taki zapis:
  37.   p = 5 + p
  38.   Wtedy potrzebujemy to zrobic tak:
  39.   operator+(int x, Punkt p)
  40.  
  41.   (!!!) WAZNE - takiego operatora nie zdefiniujemy w klasie Punkt, musi byc on gdzies poza ta klasa
  42.   Napisalem Ci taki w mainie
  43.   ========================================================================================
  44.   */
  45.  
  46.  
  47.   // .................................... OPERATOR += .................................... //
  48.   Punkt& operator +=(Punkt &v) {
  49.     this->x += v.x;
  50.     this->y += v.y;
  51.     return * this;
  52.     // 'this' jest adresem, jak chcemy zwrocic jego zawartosc (obiekt, nie adres),
  53.     // to trzeba go wyciagnac uzywajac '*'
  54.     // Gdybysmy zwracali Punkt* to wystarczy 'return this'
  55.   }
  56.  
  57.  
  58.   // .................................... OPERATOR = ..................................... //
  59.   // Generalnie to jest chyba jeden hoy czy dasz w argumencie &p czy p, i tak nie zmieniamy
  60.   // wartosci tego argumentu wiec adres (referencja, wskaznik) wogole nie jest potrzebny
  61.   // ale z jakiegos zjebanego powodu w wiekszosci tutorialow jest ta referencja &
  62.   //
  63.   // Tutaj akurat jest problem, bo bez & tak wyglada defaultowy operator =
  64.   // W momencie jak go nadpisze operator=(Punkt &p) to wymagane jest referencji, czyli
  65.   //
  66.   // Punkt p = Punkt(5,10);
  67.   // p = Punkt(10,20) <----- nie mozna tak zrobic, bo Punkt(10,20) nie jest referencja! nie skompiluje sie
  68.   // wiec w tym operatorze zostawilem to bez '&' bo w mainie resetuje te wartosci
  69.   // Bezpieczniej jest dawac te & bo te ciule sie przypierdola pewnie o to
  70.   Punkt& operator =(Punkt p) {
  71.     this->x = p.x;
  72.     this->y = p.y;
  73.     return * this;
  74.   }
  75.  
  76.  
  77.   // .................................... OPERATOR == .................................... //
  78.   bool operator ==(Punkt &p) {
  79.     return (this->x == p.x) && (this->y == p.y);
  80.   }
  81.  
  82.  
  83.   // .................................... OPERATOR + .................................... //
  84.   Punkt operator +(Punkt &v) {
  85.     int nowyX = this->x + v.x;
  86.     int nowyY = this->y + v.y;
  87.     Punkt nowyPunkt = Punkt(nowyX, nowyY);
  88.  
  89.     return nowyPunkt;
  90.   }
  91.  
  92.  
  93.  
  94. };
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top