#include <iostream>
#include <cmath>
#include <stdexcept>
#include <string.h>
using namespace std;
class Array {
public:
Array() {
size = max_size;
ptr = new unsigned char[size];
}
Array(int size) {
if(size <= max_size)
this->size = size;
else
this->size = max_size;
ptr = new unsigned char[size];
for(int i = 0; i < size; i++)
ptr[i] = 0;
}
Array(const Array &obj) {
size = obj.size;
ptr = new unsigned char[size];
for(int i = 0; i < size; i++)
ptr[i] = obj.ptr[i];
}
~Array() {
delete []ptr;
}
unsigned char &operator[](int index) {
if(index >= 0 && index < size)
return ptr[index];
else
throw out_of_range("out_of_range");
}
friend ostream &operator <<(ostream &os, const Array &obj) {
for(int i = 0; i < obj.size; i++)
os << obj.ptr[i];
return os;
}
virtual Array operator+(const Array &obj2) {
for(int i = 0; i < obj2.size; i++)
this->ptr[i] = (int)this->ptr[i] + (int)obj2.ptr[i];
}
protected:
static const int max_size = 10;
unsigned char *ptr;
int size;
};
class Money:public Array {
protected:
static const int max_size = 100;
};
int main() {
int n = 5;
Array table(n);
Array t(n);
cout << table;
for(int i = 0; i < n; i++)
{table[i] = i;
t[i] = i + 3;}
cout << table;
cout << t;
cout << table+t;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+IAojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8c3RyaW5nLmg+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApjbGFzcyBBcnJheSAgewpwdWJsaWM6CiAgICBBcnJheSgpICB7CiAgICAgICAgc2l6ZSA9IG1heF9zaXplOwogICAgICAgIHB0ciA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOyAgICAgIAogICAgfQogICAgQXJyYXkoaW50IHNpemUpICB7CiAgICAgICAgaWYoc2l6ZSA8PSBtYXhfc2l6ZSkKICAgICAgICAgICAgdGhpcy0+c2l6ZSA9IHNpemU7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0aGlzLT5zaXplID0gbWF4X3NpemU7CiAgICAgICAgcHRyID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAgICAgICAgcHRyW2ldID0gMDsKICAgIH0KICAgIEFycmF5KGNvbnN0IEFycmF5ICZvYmopICB7CiAgICAgICAgc2l6ZSA9IG9iai5zaXplOwogICAgICAgIHB0ciA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCiAgICAgICAgICAgIHB0cltpXSA9IG9iai5wdHJbaV07CiAgICB9CiAgICB+QXJyYXkoKSAgewogICAgICAgIGRlbGV0ZSBbXXB0cjsKICAgIH0KICAgIHVuc2lnbmVkIGNoYXIgJm9wZXJhdG9yW10oaW50IGluZGV4KSAgewogICAgICAgIGlmKGluZGV4ID49IDAgJiYgaW5kZXggPCBzaXplKQogICAgICAgICAgICByZXR1cm4gcHRyW2luZGV4XTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG91dF9vZl9yYW5nZSgib3V0X29mX3JhbmdlIik7CiAKICAgIH0KICAgIGZyaWVuZCBvc3RyZWFtICZvcGVyYXRvciA8PChvc3RyZWFtICZvcywgY29uc3QgQXJyYXkgJm9iaikgIHsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgb2JqLnNpemU7IGkrKykKICAgICAgICAgICAgb3MgPDwgb2JqLnB0cltpXTsKICAgICAgICByZXR1cm4gb3M7CiAgICB9CiAgICAKICAgIHZpcnR1YWwgQXJyYXkgb3BlcmF0b3IrKGNvbnN0IEFycmF5ICZvYmoyKSAgewogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBvYmoyLnNpemU7IGkrKykKICAgICAgICAgICAgdGhpcy0+cHRyW2ldID0gKGludCl0aGlzLT5wdHJbaV0gKyAoaW50KW9iajIucHRyW2ldOwogICAgfQoKcHJvdGVjdGVkOgogICAgc3RhdGljIGNvbnN0IGludCBtYXhfc2l6ZSA9IDEwOwogICAgdW5zaWduZWQgY2hhciAqcHRyOwogICAgaW50IHNpemU7Cn07CgpjbGFzcyBNb25leTpwdWJsaWMgQXJyYXkgIHsKcHJvdGVjdGVkOgogICAgc3RhdGljIGNvbnN0IGludCBtYXhfc2l6ZSA9IDEwMDsKCn07CiAKaW50IG1haW4oKSAgewoJaW50IG4gPSA1OwogICAgQXJyYXkgdGFibGUobik7CiAgICBBcnJheSB0KG4pOwogICAgY291dCA8PCB0YWJsZTsKIAogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICB7dGFibGVbaV0gPSBpOwogICAgICAgIHRbaV0gPSBpICsgMzt9CiAKICAgIGNvdXQgPDwgdGFibGU7CiAgICBjb3V0IDw8IHQ7CiAgICBjb3V0IDw8IHRhYmxlK3Q7CgoKICAgIHJldHVybiAwOwp9