#include <iostream>
using std::cout;
using std::endl;

class forlab
{
public:
    std::string name;
    int size;
    int* arr;
    forlab(std::string name, int size) {

        cout << "Ctor " << name << endl;

        this->size = size;
        this->name = name;
        *&arr = new int[size];
        for (int i = 0; i < size; i++) {
            arr[i] = 0;
        }
    }
    forlab() {
        cout << "Default ctor\n";
        this->name = "";
        this->size = 0;
        this->arr = 0;
    }
    forlab(const forlab& f):name(f.name),size(f.size)
    {

        cout << "Copy ctor " << name << endl;

        arr = new int[size];
        for (int i = 0; i < size; i++) {
            arr[i] = f.arr[i];
        }
    }
    ~forlab() {
        cout << "Dtor " << name << endl;

        delete [] this->arr;
    }

    int& operator[] (const int index);
    friend forlab operator+(const forlab a,const forlab b);
    void show() {
        for (int i = 0; i < size; i++) {
            cout << this->arr[i] << " ";
        }
        cout << endl;
    }
};

int& forlab::operator[] (const int index)
{
    return this->arr[index];
}
forlab operator+(const forlab a, const forlab b) {
    forlab temp("", a.size+b.size);
    for (int i = 0; i < a.size; i++) {
        temp.arr[i] = a.arr[i];
    }
    int counter = a.size;
    for (int i = 0; i < b.size; i++) {
        temp.arr[counter] = b.arr[i];
        counter++;
    }
    return temp;
}

int main() {
    forlab ex1("first", 15);
    forlab ex2("second", 20);
    forlab ex3 = ex1 + ex2;
    ex3.show();
    return 0;
}
