#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+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBteV9zdHJpbmcgewoJc2l6ZV90IGxlbmd0aCA9IDA7CgljaGFyICpkYXRhID0gbnVsbHB0cjsKCQoJdm9pZCBzZXRfZGF0YShjaGFyIGNvbnN0ICpzdHIpIHsKCQlsZW5ndGggPSBzdHJsZW4oc3RyKTsKCQlpZihkYXRhKSB7CgkJCWRlbGV0ZSBkYXRhOwoJCX0KCQlkYXRhID0gc3RyY3B5KG5ldyBjaGFyW2xlbmd0aCsxXSwgc3RyKTsKCX0KcHVibGljOgoJbXlfc3RyaW5nKGNoYXIgY29uc3QgKnN0cikgewoJCXNldF9kYXRhKHN0cik7Cgl9CgkKCW15X3N0cmluZyhteV9zdHJpbmcgY29uc3QgJm90aGVyKTogCgkJbXlfc3RyaW5nKG90aGVyLmNfc3RyKCkpIHt9CgkKCWNoYXIgY29uc3QgKiBjX3N0cigpIGNvbnN0IHsKCQlyZXR1cm4gZGF0YTsKCX0KCQoJbXlfc3RyaW5nICZvcGVyYXRvcj0oY2hhciBjb25zdCAqc3RyKSB7CgkJc2V0X2RhdGEoc3RyKTsJCgkJcmV0dXJuICp0aGlzOwoJfQoJCglteV9zdHJpbmcgJm9wZXJhdG9yPShteV9zdHJpbmcgY29uc3QgJm90aGVyKSB7CgkJc2V0X2RhdGEob3RoZXIuY19zdHIoKSk7CgkJcmV0dXJuICp0aGlzOwoJfQoJCgl+bXlfc3RyaW5nKCkgewoJCWRlbGV0ZSBkYXRhOwoJfQoJCglmcmllbmQgb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvdXQsIG15X3N0cmluZyBjb25zdCAmc3RyKSB7CgkJcmV0dXJuIG91dCA8PCBzdHIuY19zdHIoKTsKCX0KCQoJZnJpZW5kIGlzdHJlYW0gJm9wZXJhdG9yPj4oaXN0cmVhbSAmaW4sIG15X3N0cmluZyAmc3RyKSB7CgkJcmV0dXJuIGluOyAvL2plc3RlbSB3IHRyYWtjaWUgb2dsxIVkYW5pYSBkci4gaG91c2UsIGplxZtsaSBjaGNlc3ogc2llIGJhd2ljIHcgcmVsb2thY2plIHRvIHBvd29kem9ua2EKCX0KfTsKCnN0cnVjdCBwZXJzb24gewoJbXlfc3RyaW5nIG5hbWUsIHN1cm5hbWU7CglmcmllbmQgb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvdXQsIHBlcnNvbiBjb25zdCAmcCkgewoJCXJldHVybiBvdXQgPDwgcC5uYW1lIDw8ICIgIiA8PCBwLnN1cm5hbWU7Cgl9Cn07CgppbnQgbWFpbigpIHsKCXBlcnNvbiBwID0gewoJCSJBZGFtIiwgIktvd2Fsc2tpIgoJfTsKCWNvdXQgPDwgcCA8PCBlbmRsOwoJcC5zdXJuYW1lID0gIk1hbGlub3dza2kiOwoJY291dCA8PCBwIDw8IGVuZGw7CglwLm5hbWUgPSBteV9zdHJpbmcoIkphbmVjemVrIik7Cgljb3V0IDw8IHAgPDwgZW5kbDsKCXJldHVybiAwOwp9