#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
class my_string {
size_t length = 0;
char *data = nullptr;
void set_data(char const *str) {
length = strlen(str);
if(data) {
delete []data;
}
data = strcpy(new char[length+1], str);
}
public:
my_string(char const *str) {
set_data(str);
}
my_string(my_string const &other):
my_string(other.c_str()) {}
char const * c_str() const {
return data;
}
my_string &operator=(char const *str) {
set_data(str);
return *this;
}
my_string &operator=(my_string const &other) {
set_data(other.c_str());
return *this;
}
~my_string() {
delete []data;
}
friend ostream &operator<<(ostream &out, my_string const &str) {
return out << str.c_str();
}
friend istream &operator>>(istream &in, my_string &str) {
return in; //jestem w trakcie oglądania dr. house, jeśli chcesz sie bawic w relokacje to powodzonka
}
};
struct person {
my_string name, surname;
friend ostream &operator<<(ostream &out, person const &p) {
return out << p.name << " " << p.surname;
}
};
int main() {
person p = {
"Adam", "Kowalski"
};
cout << p << endl;
p.surname = "Malinowski";
cout << p << endl;
p.name = my_string("Janeczek");
cout << p << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBteV9zdHJpbmcgewoJc2l6ZV90IGxlbmd0aCA9IDA7CgljaGFyICpkYXRhID0gbnVsbHB0cjsKCQoJdm9pZCBzZXRfZGF0YShjaGFyIGNvbnN0ICpzdHIpIHsKCQlsZW5ndGggPSBzdHJsZW4oc3RyKTsKCQlpZihkYXRhKSB7CgkJCWRlbGV0ZSBbXWRhdGE7CgkJfQoJCWRhdGEgPSBzdHJjcHkobmV3IGNoYXJbbGVuZ3RoKzFdLCBzdHIpOwoJfQpwdWJsaWM6CglteV9zdHJpbmcoY2hhciBjb25zdCAqc3RyKSB7CgkJc2V0X2RhdGEoc3RyKTsKCX0KCQoJbXlfc3RyaW5nKG15X3N0cmluZyBjb25zdCAmb3RoZXIpOiAKCQlteV9zdHJpbmcob3RoZXIuY19zdHIoKSkge30KCQoJY2hhciBjb25zdCAqIGNfc3RyKCkgY29uc3QgewoJCXJldHVybiBkYXRhOwoJfQoJCglteV9zdHJpbmcgJm9wZXJhdG9yPShjaGFyIGNvbnN0ICpzdHIpIHsKCQlzZXRfZGF0YShzdHIpOwkKCQlyZXR1cm4gKnRoaXM7Cgl9CgkKCW15X3N0cmluZyAmb3BlcmF0b3I9KG15X3N0cmluZyBjb25zdCAmb3RoZXIpIHsKCQlzZXRfZGF0YShvdGhlci5jX3N0cigpKTsKCQlyZXR1cm4gKnRoaXM7Cgl9CgkKCX5teV9zdHJpbmcoKSB7CgkJZGVsZXRlIFtdZGF0YTsKCX0KCQoJZnJpZW5kIG9zdHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmb3V0LCBteV9zdHJpbmcgY29uc3QgJnN0cikgewoJCXJldHVybiBvdXQgPDwgc3RyLmNfc3RyKCk7Cgl9CgkKCWZyaWVuZCBpc3RyZWFtICZvcGVyYXRvcj4+KGlzdHJlYW0gJmluLCBteV9zdHJpbmcgJnN0cikgewoJCXJldHVybiBpbjsgLy9qZXN0ZW0gdyB0cmFrY2llIG9nbMSFZGFuaWEgZHIuIGhvdXNlLCBqZcWbbGkgY2hjZXN6IHNpZSBiYXdpYyB3IHJlbG9rYWNqZSB0byBwb3dvZHpvbmthCgl9Cn07CgpzdHJ1Y3QgcGVyc29uIHsKCW15X3N0cmluZyBuYW1lLCBzdXJuYW1lOwoJZnJpZW5kIG9zdHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmb3V0LCBwZXJzb24gY29uc3QgJnApIHsKCQlyZXR1cm4gb3V0IDw8IHAubmFtZSA8PCAiICIgPDwgcC5zdXJuYW1lOwoJfQp9OwoKaW50IG1haW4oKSB7CglwZXJzb24gcCA9IHsKCQkiQWRhbSIsICJLb3dhbHNraSIKCX07Cgljb3V0IDw8IHAgPDwgZW5kbDsKCXAuc3VybmFtZSA9ICJNYWxpbm93c2tpIjsKCWNvdXQgPDwgcCA8PCBlbmRsOwoJcC5uYW1lID0gbXlfc3RyaW5nKCJKYW5lY3playIpOwoJY291dCA8PCBwIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==