Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.58 KB | None | 0 0
  1. // Rtslaba.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #include "pch.h"
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. class vektor //объявление класса вектор
  9. {
  10. public:
  11.     int size; //переменная размера массива
  12.     int *mas;  //наш динамический массив
  13.  
  14.     void Input(); //объявление функции ввода эл-ов вектора
  15.     vektor(int size); //объявление конструктора
  16.     void Output(); //объявление функции вывода эл-ов вектора
  17.     void Subtraction(vektor vek); //объявление функции поэлементного вычитания двух векторов.
  18.     vektor operator-(vektor vekt); //перегрузка функции поэлементного вычитания двух векторов.
  19.     ~vektor(); //объявление деструктора
  20.     vektor(const vektor & vekt);  //объявление оператора копирования
  21. };
  22.  
  23. void vektor::Input()  //ф-я ввода вектора
  24. {
  25.     for (int i = 0; i < size; i++)
  26.         mas[i] = -4 + rand() % 10; //рандомно заполняет вектор от -4 до 10(не вкл)
  27. }
  28.  
  29. vektor::vektor(int size) //конструктор нашего класса
  30. {
  31.     this->size = size; //задаем размер массива ; this это указатель на текущий объект нашего класса.
  32.     if (size <= 0 || size > 100)  //если ввели размер <= 0 или >100 то пишем ошибку иначе идем дальше и заполняем вектор нулями
  33.         cout << "ERROR!!!" << endl;
  34.     else
  35.     {
  36.         mas = new int[size]; //объявляем наш динамический массив (если прям конкретно то это выделение динамической памяти под массив размеров size, за это отвечает слово new; НО ЛУЧШЕ ЭТО ГОВОРИ ЕСЛИ ПРЯМ ПЕЗДА ДОЕБЫВАЕТСЯ А ТАК НЕ НАДО ЛУЧШЕ))) )
  37.         for (int i = 0; i < size; i++)
  38.             mas[i] = 0; //заполняем наш вектор нулями
  39.     }
  40. }
  41.  
  42. void vektor::Output() //ф-я вывода вектора
  43. {
  44.     for (int i = 0; i < size; i++)
  45.     {
  46.         cout << mas[i] << "  ";  //выводим наш вектор
  47.     }
  48.     cout << endl; //переход на новую строчку
  49.     cout << "===========================================================================" << endl;
  50. }
  51.  
  52. void vektor::Subtraction(vektor vek) //ф-я вычитания векторов
  53. {
  54.     for (int i = 0; i < size; i++)
  55.     {
  56.         mas[i] -= vek.mas[i]; //вычитаем векторы т.е. н-р из вектора 'P' вычитаем вектор 'H' и записываем результат В ВЕКТОР P!!!(т.е.просто перезаписываем его)
  57.     }
  58. }
  59.  
  60. vektor vektor::operator-(vektor vekt) //перегрузка оператора вычитания векторов
  61. {
  62.     for (int i = 0; i < size; i++)
  63.     {
  64.         mas[i] -= vekt.mas[i]; //вычитаем векторы т.е. н-р из вектора 'P' вычитаем вектор 'H' и записываем результат В ВЕКТОР P!!!(т.е.просто перезаписываем его)
  65.     }
  66.     return *this; //возвращаем указатель на наш класс this; перед this звездочка ибо мы передаем this по ссылке и ваще this это указатель!
  67. }
  68.  
  69. vektor::~vektor() //это деструктор и он удаляет нашу ДИНАМИЧЕСКИ выделенную память
  70. {
  71.     delete[] mas; // т.к у нас ДИНАМИЧЕСКИЙ массив то он его и будет УДАЛЯТЬ(неожиданно)
  72. }
  73.  
  74. vektor::vektor(const vektor & vekt) //конструктор копирования( тупо копирует все из одного объекта в другой)
  75. {
  76.     size = vekt.size; //присваем значение size старого объекта в size нового объекта
  77.     mas = new int[size]; //тут мы прост создаем нов дин. массив
  78.     for (int i = 0; i < size; i++)
  79.     {
  80.         mas[i] = vekt.mas[i]; //а тут мы присваеваем значения старого вектора в нов вектор
  81.     }
  82. }
  83.  
  84. int main()
  85. {
  86.     setlocale(LC_ALL, "Russian");// это шоб русские букавы выводил норм
  87.     int size;
  88.     cout << "size = ";
  89.     cin >> size; //вводим размер нашего массива
  90.     cout << "===========================================================================" << endl;
  91.  
  92.     vektor a(size); //создаем объект(экземпляр) a нашего класса; тут вызывается наш конструктор где вектор заполняется нулями
  93.     a.Input();  //заполняем наш вектор объекта а рандомно
  94.     cout << "Вектор a: ";
  95.     a.Output(); //вывод нашего вектора объекта а
  96.  
  97.     vektor b(size);  //создаем объект(экземпляр) b нашего класса; тут вызывается наш конструктор где вектор заполняется нулями
  98.     b.Input(); //заполняем наш вектор объекта b рандомно
  99.     cout << "Вектор b: ";
  100.     b.Output(); //вывод нашего вектора объекта b
  101.  
  102.     cout << "Вектор c=a-b : "; //вектор 'c' будет новым вектором 'a' (т.е по сути просто переписываем значения вектора 'a') поэтому выводим надпись c=a-b шоб красиво было ибо a=a-b не оч гуд
  103.     a.Subtraction(b);  //вычитаем из вектора а вектор b
  104.     a.Output(); //выводим наш новый вектор a
  105.  
  106.     cout << "Вектор d=c-b : ";//отнимаем фактически от вектора 'a', но пишем, что от 'c' ибо 'c' мы уже написали для красоты  поэтому воспринимаем вектор c как вектор a
  107.     vektor d = a - b; //демонстрируем нашу перегрузку; тут уже пишем что от a вычитаем b
  108.     d.Output(); //выводим вектор d но ПО ФАКТУ ЭТО ВЕКТОР а
  109.  
  110.     cout << "Конструктор копирования (копировали вектор b в вектор g)" << endl;
  111.     vektor g(b); //вызываем конструктор копирования*(копируем вектор b в новый g)
  112.     cout << "Вектор g: ";
  113.     g.Output(); //выводим вектор g
  114.     return 0;
  115. }
  116.  //НЕМНОГО ИНФЫ
  117. //деструктор вызывается после выполенения всей ф-ии main
  118. //статический массив отлич от дин-го тем что память у дин. мас. выделяем динамически и размер можно задать а в статич. мас. память выдел. фиксированно и размер фиксированный
  119. //класс это такая струкутра данных состоящая из свойств и методов (функции)
  120. //объект(экземпляр) класса это конкретное представление нашего класса, имеющий свои свойства и методы
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement