#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6ZW5kbDsKCmNsYXNzIGZvcmxhYgp7CnB1YmxpYzoKICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICBpbnQgc2l6ZTsKICAgIGludCogYXJyOwogICAgZm9ybGFiKHN0ZDo6c3RyaW5nIG5hbWUsIGludCBzaXplKSB7CgogICAgICAgIGNvdXQgPDwgIkN0b3IgIiA8PCBuYW1lIDw8IGVuZGw7CgogICAgICAgIHRoaXMtPnNpemUgPSBzaXplOwogICAgICAgIHRoaXMtPm5hbWUgPSBuYW1lOwogICAgICAgIComYXJyID0gbmV3IGludFtzaXplXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICBhcnJbaV0gPSAwOwogICAgICAgIH0KICAgIH0KICAgIGZvcmxhYigpIHsKICAgICAgICBjb3V0IDw8ICJEZWZhdWx0IGN0b3JcbiI7CiAgICAgICAgdGhpcy0+bmFtZSA9ICIiOwogICAgICAgIHRoaXMtPnNpemUgPSAwOwogICAgICAgIHRoaXMtPmFyciA9IDA7CiAgICB9CiAgICBmb3JsYWIoY29uc3QgZm9ybGFiJiBmKTpuYW1lKGYubmFtZSksc2l6ZShmLnNpemUpCiAgICB7CgogICAgICAgIGNvdXQgPDwgIkNvcHkgY3RvciAiIDw8IG5hbWUgPDwgZW5kbDsKCiAgICAgICAgYXJyID0gbmV3IGludFtzaXplXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICBhcnJbaV0gPSBmLmFycltpXTsKICAgICAgICB9CiAgICB9CiAgICB+Zm9ybGFiKCkgewogICAgICAgIGNvdXQgPDwgIkR0b3IgIiA8PCBuYW1lIDw8IGVuZGw7CgogICAgICAgIGRlbGV0ZSBbXSB0aGlzLT5hcnI7CiAgICB9CgogICAgaW50JiBvcGVyYXRvcltdIChjb25zdCBpbnQgaW5kZXgpOwogICAgZnJpZW5kIGZvcmxhYiBvcGVyYXRvcisoY29uc3QgZm9ybGFiIGEsY29uc3QgZm9ybGFiIGIpOwogICAgdm9pZCBzaG93KCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGNvdXQgPDwgdGhpcy0+YXJyW2ldIDw8ICIgIjsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQp9OwoKaW50JiBmb3JsYWI6Om9wZXJhdG9yW10gKGNvbnN0IGludCBpbmRleCkKewogICAgcmV0dXJuIHRoaXMtPmFycltpbmRleF07Cn0KZm9ybGFiIG9wZXJhdG9yKyhjb25zdCBmb3JsYWIgYSwgY29uc3QgZm9ybGFiIGIpIHsKICAgIGZvcmxhYiB0ZW1wKCIiLCBhLnNpemUrYi5zaXplKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYS5zaXplOyBpKyspIHsKICAgICAgICB0ZW1wLmFycltpXSA9IGEuYXJyW2ldOwogICAgfQogICAgaW50IGNvdW50ZXIgPSBhLnNpemU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGIuc2l6ZTsgaSsrKSB7CiAgICAgICAgdGVtcC5hcnJbY291bnRlcl0gPSBiLmFycltpXTsKICAgICAgICBjb3VudGVyKys7CiAgICB9CiAgICByZXR1cm4gdGVtcDsKfQoKaW50IG1haW4oKSB7CiAgICBmb3JsYWIgZXgxKCJmaXJzdCIsIDE1KTsKICAgIGZvcmxhYiBleDIoInNlY29uZCIsIDIwKTsKICAgIGZvcmxhYiBleDMgPSBleDEgKyBleDI7CiAgICBleDMuc2hvdygpOwogICAgcmV0dXJuIDA7Cn0K