Advertisement
Derga

Untitled

May 21st, 2023 (edited)
1,092
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. //Билет 7
  2. //Перегрузка операторов <<, >>, []
  3. /*
  4. Язык C++ имеет широкие возможности для перегрузки большинства операторов.
  5. Перегрузка оператора означает использование оператора для оперирования определенными объектами классов.  
  6. При перегрузке оператора в классе вызывается соответствующая операторная функция (operator function),
  7. которая выполняет действия, которые касаются данного класса.
  8. */
  9.  
  10. // Класс, который реализует точку на координатной плоскости
  11. // класс содержит две операторные функции
  12.  
  13. #include <iostream>
  14.  
  15. using namespace std;
  16.  
  17. class Point {
  18. private:
  19.     int x, y; // координаты точки
  20.  
  21. public:
  22.     // конструкторы класса
  23.     Point() {
  24.         x = 0;
  25.         y = 0;
  26.     }
  27.  
  28.     Point(int nx, int ny) {
  29.         x = nx;
  30.         y = ny;
  31.     }
  32.  
  33.     // методы доступа к членам класса
  34.     int GetX(void) const { return x; }
  35.     int GetY(void) const { return y; }
  36.     void SetX(int new_x) { x = new_x; }
  37.     void SetY(int new_y) { y = new_y; }
  38.  
  39.     // перегруженный бинарный оператор '+'
  40.     Point operator+(const Point& pt) {
  41.         // p - временный объект, который создается с помощью конструктора без параметров
  42.         Point p;
  43.         p.x = x + pt.x;
  44.         p.y = y + pt.y;
  45.         return p;
  46.     }
  47.  
  48.     // перегруженный унарный оператор '-'
  49.     Point operator-(const Point& pt) {
  50.         Point p;
  51.         p.x = x - pt.x;
  52.         p.y = y - pt.y;
  53.         return p;
  54.     }
  55.  
  56.     friend istream& operator>>(istream&, Point&);
  57.  
  58.     int& operator[](int index) {
  59.         if (index == 0) {
  60.             return x;
  61.         }
  62.         else {
  63.             return y;
  64.         }
  65.     }
  66. };
  67.  
  68. istream& operator>>(istream& in, Point& p) {
  69.     int x, y;
  70.     in >> x >> y;
  71.     p.SetX(x);
  72.     p.SetY(y);
  73.     return in;
  74. }
  75.  
  76. ostream& operator<<(ostream& out, const Point& p) {
  77.     out << p.GetX() << ' ' << p.GetY();
  78.     return out;
  79. }
  80.  
  81. int main() {
  82.     // объявление переменных - объектов класса CPoint
  83.     Point P1(3, 4);
  84.     Point P2(5, 7);
  85.    
  86.     // 1. Использование перегруженного бинарного оператора '+'
  87.     Point P3 = P1 + P2; // объект P1 вызывает операторную функцию
  88.     //std::cout << P3.GetX() << ' ' << P3.GetY() << '\n';
  89.     cout << P3 << '\n';
  90.    
  91.     // 2. Использование перегруженного унарного оператора '-'
  92.     Point P4 = P1 - P2;
  93.     //std::cout << P3.GetX() << ' ' << P3.GetY() << '\n';
  94.     cout << P4 << '\n';
  95.  
  96.     Point P5;
  97.     cin >> P5;
  98.     cout << P5 << '\n';
  99.  
  100.     P5[0] = 21;
  101.     P5[1] = 42;
  102.     int p5_x = P5[0];
  103.     int p5_y = P5[1];
  104.     cout << P5 << '\n' << p5_x << ' ' << p5_y;
  105.  
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement