Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Rtslaba.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
- //
- #include "pch.h"
- #include <iostream>
- using namespace std;
- class vektor //объявление класса вектор
- {
- public:
- int size; //переменная размера массива
- int *mas; //наш динамический массив
- void Input(); //объявление функции ввода эл-ов вектора
- vektor(int size); //объявление конструктора
- void Output(); //объявление функции вывода эл-ов вектора
- void Subtraction(vektor vek); //объявление функции поэлементного вычитания двух векторов.
- vektor operator-(vektor vekt); //перегрузка функции поэлементного вычитания двух векторов.
- ~vektor(); //объявление деструктора
- vektor(const vektor & vekt); //объявление оператора копирования
- };
- void vektor::Input() //ф-я ввода вектора
- {
- for (int i = 0; i < size; i++)
- mas[i] = -4 + rand() % 10; //рандомно заполняет вектор от -4 до 10(не вкл)
- }
- vektor::vektor(int size) //конструктор нашего класса
- {
- this->size = size; //задаем размер массива ; this это указатель на текущий объект нашего класса.
- if (size <= 0 || size > 100) //если ввели размер <= 0 или >100 то пишем ошибку иначе идем дальше и заполняем вектор нулями
- cout << "ERROR!!!" << endl;
- else
- {
- mas = new int[size]; //объявляем наш динамический массив (если прям конкретно то это выделение динамической памяти под массив размеров size, за это отвечает слово new; НО ЛУЧШЕ ЭТО ГОВОРИ ЕСЛИ ПРЯМ ПЕЗДА ДОЕБЫВАЕТСЯ А ТАК НЕ НАДО ЛУЧШЕ))) )
- for (int i = 0; i < size; i++)
- mas[i] = 0; //заполняем наш вектор нулями
- }
- }
- void vektor::Output() //ф-я вывода вектора
- {
- for (int i = 0; i < size; i++)
- {
- cout << mas[i] << " "; //выводим наш вектор
- }
- cout << endl; //переход на новую строчку
- cout << "===========================================================================" << endl;
- }
- void vektor::Subtraction(vektor vek) //ф-я вычитания векторов
- {
- for (int i = 0; i < size; i++)
- {
- mas[i] -= vek.mas[i]; //вычитаем векторы т.е. н-р из вектора 'P' вычитаем вектор 'H' и записываем результат В ВЕКТОР P!!!(т.е.просто перезаписываем его)
- }
- }
- vektor vektor::operator-(vektor vekt) //перегрузка оператора вычитания векторов
- {
- for (int i = 0; i < size; i++)
- {
- mas[i] -= vekt.mas[i]; //вычитаем векторы т.е. н-р из вектора 'P' вычитаем вектор 'H' и записываем результат В ВЕКТОР P!!!(т.е.просто перезаписываем его)
- }
- return *this; //возвращаем указатель на наш класс this; перед this звездочка ибо мы передаем this по ссылке и ваще this это указатель!
- }
- vektor::~vektor() //это деструктор и он удаляет нашу ДИНАМИЧЕСКИ выделенную память
- {
- delete[] mas; // т.к у нас ДИНАМИЧЕСКИЙ массив то он его и будет УДАЛЯТЬ(неожиданно)
- }
- vektor::vektor(const vektor & vekt) //конструктор копирования( тупо копирует все из одного объекта в другой)
- {
- size = vekt.size; //присваем значение size старого объекта в size нового объекта
- mas = new int[size]; //тут мы прост создаем нов дин. массив
- for (int i = 0; i < size; i++)
- {
- mas[i] = vekt.mas[i]; //а тут мы присваеваем значения старого вектора в нов вектор
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");// это шоб русские букавы выводил норм
- int size;
- cout << "size = ";
- cin >> size; //вводим размер нашего массива
- cout << "===========================================================================" << endl;
- vektor a(size); //создаем объект(экземпляр) a нашего класса; тут вызывается наш конструктор где вектор заполняется нулями
- a.Input(); //заполняем наш вектор объекта а рандомно
- cout << "Вектор a: ";
- a.Output(); //вывод нашего вектора объекта а
- vektor b(size); //создаем объект(экземпляр) b нашего класса; тут вызывается наш конструктор где вектор заполняется нулями
- b.Input(); //заполняем наш вектор объекта b рандомно
- cout << "Вектор b: ";
- b.Output(); //вывод нашего вектора объекта b
- cout << "Вектор c=a-b : "; //вектор 'c' будет новым вектором 'a' (т.е по сути просто переписываем значения вектора 'a') поэтому выводим надпись c=a-b шоб красиво было ибо a=a-b не оч гуд
- a.Subtraction(b); //вычитаем из вектора а вектор b
- a.Output(); //выводим наш новый вектор a
- cout << "Вектор d=c-b : ";//отнимаем фактически от вектора 'a', но пишем, что от 'c' ибо 'c' мы уже написали для красоты поэтому воспринимаем вектор c как вектор a
- vektor d = a - b; //демонстрируем нашу перегрузку; тут уже пишем что от a вычитаем b
- d.Output(); //выводим вектор d но ПО ФАКТУ ЭТО ВЕКТОР а
- cout << "Конструктор копирования (копировали вектор b в вектор g)" << endl;
- vektor g(b); //вызываем конструктор копирования*(копируем вектор b в новый g)
- cout << "Вектор g: ";
- g.Output(); //выводим вектор g
- return 0;
- }
- //НЕМНОГО ИНФЫ
- //деструктор вызывается после выполенения всей ф-ии main
- //статический массив отлич от дин-го тем что память у дин. мас. выделяем динамически и размер можно задать а в статич. мас. память выдел. фиксированно и размер фиксированный
- //класс это такая струкутра данных состоящая из свойств и методов (функции)
- //объект(экземпляр) класса это конкретное представление нашего класса, имеющий свои свойства и методы
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement