Advertisement
Guest User

Punkt

a guest
Dec 7th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  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. Takim operatorem jest tez strumieniowy '<<', jak chcesz zrobic:
  45. Punkt p1 = Punkt(5,15);
  46. std::cout << p1;
  47. Go trzeba deklarowac na zewnatrz, dlatego ze lewy argument to output stream (std::ostream)
  48. ========================================================================================
  49. */
  50.  
  51.  
  52. // .................................... OPERATOR += .................................... //
  53. Punkt& operator +=(Punkt &v) {
  54. this->x += v.x;
  55. this->y += v.y;
  56. return * this;
  57. // 'this' jest adresem, jak chcemy zwrocic jego zawartosc (obiekt, nie adres),
  58. // to trzeba go wyciagnac uzywajac '*'
  59. // Gdybysmy zwracali Punkt* to wystarczy 'return this'
  60. }
  61.  
  62.  
  63. // .................................... OPERATOR = ..................................... //
  64. // Generalnie to jest chyba jeden hoy czy dasz w argumencie &p czy p, i tak nie zmieniamy
  65. // wartosci tego argumentu wiec adres (referencja, wskaznik) wogole nie jest potrzebny
  66. // ale z jakiegos zjebanego powodu w wiekszosci tutorialow jest ta referencja &
  67. //
  68. // Tutaj akurat jest problem, bo bez & tak wyglada defaultowy operator =
  69. // W momencie jak go nadpisze operator=(Punkt &p) to wymagane jest referencji, czyli
  70. //
  71. // Punkt p = Punkt(5,10);
  72. // p = Punkt(10,20) <----- nie mozna tak zrobic, bo Punkt(10,20) nie jest referencja! nie skompiluje sie
  73. // wiec w tym operatorze zostawilem to bez '&' bo w mainie resetuje te wartosci
  74. // Bezpieczniej jest dawac te & bo te ciule sie przypierdola pewnie o to
  75. Punkt& operator =(Punkt p) {
  76. this->x = p.x;
  77. this->y = p.y;
  78. return * this;
  79. }
  80.  
  81.  
  82. // .................................... OPERATOR == .................................... //
  83. bool operator ==(Punkt &p) {
  84. return (this->x == p.x) && (this->y == p.y);
  85. }
  86.  
  87.  
  88. // .................................... OPERATOR + .................................... //
  89. Punkt operator +(Punkt &v) {
  90. int nowyX = this->x + v.x;
  91. int nowyY = this->y + v.y;
  92. Punkt nowyPunkt = Punkt(nowyX, nowyY);
  93.  
  94. return nowyPunkt;
  95. }
  96.  
  97.  
  98.  
  99.  
  100. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement