Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define DEBUG
- //если DEBUG определён - освобождение памяти выполняется
- //если не определён - освобождения памяти нет
- #include <iostream>
- using namespace std;
- class Class_name
- {
- public:
- int size; //размер одномерного массива, задаётся при создании объекта
- int * data; //указатель на массив, создаётся в конструкторе создания, размера size
- Class_name() //перегрузка конструктор класса по умолчанию
- {
- this->size = 10;
- this->data = new int[size];
- for (int i = 0; i < size; ++i) {
- data[i] = 0;
- }
- }
- Class_name(int size) //перегрузка конструктора класса - создание массива размером size
- {
- this->size = size; //размер поля size класса равен передаваемой в конструктор переменной size
- this->data = new int[size]; //создаём массив в динамической памяти
- for (int i = 0; i < size; ++i) { //заполняем динамический массив
- data[i] = i;}
- }
- Class_name(const Class_name& other) //конструктор копирования - принимает другой объект класса
- {
- this->size = other.size; //размер поля size нового элемента равен размеру копируемого поля объекта
- this->data = new int[other.size]; //выделяем память под массив
- for (int i = 0; i < other.size; ++i) {
- this->data[i] = other.data[i];} //копируем поэлементно поля
- }
- Class_name& operator = (const Class_name& other) //перегружаем оператор =
- {
- this->size = other.size; //копируем статическое поле size
- if (this->data != nullptr) //очищаем прошлую память, если она не пуста
- delete[] this->data;
- this->data = new int[other.size]; //выделяем память по новой
- for (int i = 0; i < other.size; ++i) { //копируем значения
- this->data[i] = other.data[i];
- }
- return *this; //возвращаем указатель на новый объект
- }
- //ПЕРЕГРУЗКА ОПЕРАТОРА СЛОЖЕНИЯ
- Class_name operator + (const Class_name & other)
- {
- Class_name result_object;
- #ifdef DEBUG
- delete[] result_object.data;
- cout << "memory was anlock" << endl;
- #else
- cout << "memory was not anlock" << endl;
- #endif //DEBUG
- result_object.size = this->size + other.size;
- result_object.data = new int[result_object.size];
- int i = 0;
- for (; i < this->size; ++i) {
- cout << i;
- result_object.data[i] = this->data[i];
- }
- for (int j = 0; i < result_object.size; ++j, ++i) {
- result_object.data[i] = other.data[j];
- }
- return result_object;
- }
- bool operator == (const Class_name& other)//перегружаем оператор равенства
- {
- if (this->size != other.size) { return false; } //если размеры массивов не равны - равенства нет
- for (int i = 0; i < size; ++i) { //сравниваем массивы поэлементно
- if (this->data[i] != other.data[i]) { return false; }
- }
- return true; //возвращаем да если пройдены все проверки
- }
- bool operator != (const Class_name& other)//перегружаем оператор не равенства
- {
- if (this->size != other.size) { return true; }
- for (int i = 0; i < size; ++i) {
- if (this->data[i] != other.data[i]) { return true; }
- }
- return false;
- }
- ~Class_name() //деструктор - освобождаем динамическую память
- {delete[] data;}
- void Function_Show()
- {
- cout << "this = "<< this << endl; //ссылка на объект
- cout << "size = " << size << " adress = "<< &size << endl;//размер массива в объекте
- cout << "data = " << data << endl;
- for (int i = 0; i < size; ++i) {
- cout << "data[" << i << "] = " << data[i] <<" adress = " << &data[i] << endl;
- }
- cout << endl;
- }
- };
- int main() {
- setlocale(LC_ALL, "ru");
- Class_name A(10);
- Class_name B(A);
- cout << "object A" << endl;
- A.Function_Show();
- cout << endl << "object B" << endl;
- B.Function_Show();
- Class_name C;
- cout << endl << "object C" << endl;
- C.Function_Show();
- cout<<"is A equal C befor copy =? " << (A == C) << endl;
- cout << "true = " << true << endl;
- cout << "false = " << false << endl;
- cout << endl << "object A befor C=A" << endl;
- A.Function_Show();
- C = A;
- cout << endl << "object C after C=A" << endl;
- C.Function_Show();
- cout << "is A equal C after copy? = " << (A == C) << endl;
- cout << "true = " << true << endl;
- cout << "false = " << false << endl << endl << endl;
- cout << endl << "object A befor C=A+B" << endl;
- A.Function_Show();
- cout << endl << "object B befor C=A+B" << endl;
- B.Function_Show();
- cout << endl << "object C befor C=A+B" << endl;
- C.Function_Show();
- cout << "A PLUS B IS" << endl;
- C = A + B;
- cout << endl << "object A after C=A+B" << endl;
- A.Function_Show();
- cout << endl << "object B after C=A+B" << endl;
- B.Function_Show();
- cout << endl << "object C after C=A+B" << endl;
- C.Function_Show();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement