fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Оголошення шаблонного класу Vec2D.
  5. // <typename T> означає, що координати x та y можуть бути будь-якого типу (int, double, float тощо).
  6. template <typename T>
  7. class Vec2D {
  8. T x, y; // координати вектора
  9. public:
  10. // Конструктор за замовчуванням: x=0, y=1
  11. Vec2D(): x(0), y(1) {
  12. cout << "Constructor " << x << " " << y << endl;
  13. }
  14.  
  15. // Конструктор з параметрами
  16. Vec2D(T x, T y): x(x), y(y) {
  17. cout << "Constructor " << x << " " << y << endl;
  18. }
  19.  
  20. // Деструктор: викликається при знищенні об’єкта
  21. ~Vec2D() {
  22. cout << "Destructor " << x << " " << y << endl;
  23. }
  24.  
  25. // Перевантаження оператора присвоєння "="
  26. Vec2D<T>& operator=(const Vec2D<T>& right) {
  27. x = right.x;
  28. y = right.y;
  29. return *this;
  30. }
  31.  
  32. // Перевантаження оператора "+=" для додавання константи до координат
  33. Vec2D<T>& operator+=(T c) {
  34. x += c; y += c;
  35. return *this;
  36. }
  37.  
  38. // Постфіксний інкремент (obj++)
  39. Vec2D<T>& operator++(int) {
  40. x++; y++;
  41. return *this;
  42. }
  43.  
  44. // Префіксний інкремент (++obj)
  45. Vec2D<T>& operator++() {
  46. x++; y++;
  47. return *this;
  48. }
  49.  
  50. // Перевантаження оператора "+" для додавання двох векторів
  51. Vec2D<T> operator+(const Vec2D<T>& right) {
  52. return Vec2D<T>(x + right.x, y + right.y);
  53. }
  54.  
  55. private:
  56. // Дружня функція для виведення вектора у потік
  57. template <typename T1>
  58. friend ostream& operator<<(ostream& os, const Vec2D<T1>& a);
  59. };
  60.  
  61. // Реалізація оператора виведення <<
  62. template <typename T>
  63. ostream& operator<<(ostream& os, const Vec2D<T>& a) {
  64. os << a.x << ' ' << a.y << endl;
  65. return os;
  66. }
  67.  
  68. int main() {
  69. Vec2D<double> a(1,2); // створення вектора з координатами (1,2)
  70. Vec2D<double> b; // створення вектора за замовчуванням (0,1)
  71. ++b; // префіксний інкремент: (0,1) → (1,2)
  72. cout << b;
  73. // вивід координат вектора b
  74. b=a;
  75. cout<<"b="<<b;
  76. b = a += 100; // до a додається 100 → (101,102), результат присвоюється b
  77. b=a + b; // створюється тимчасовий вектор (202,204), але не використовується
  78. cout << b << endl; // вивід координат b (101,102)
  79. return 0;
  80. }
  81.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Constructor 1 2
Constructor 0 1
1 2
b=1 2
Constructor 202 204
Destructor 202 204
202 204

Destructor 202 204
Destructor 101 102