Guest User

Punkt

a guest
Dec 7th, 2019
125
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