#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;
}
string & operator= ( char const * str) {
set_data( str) ;
return * this ;
}
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+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBteV9zdHJpbmcgewoJc2l6ZV90IGxlbmd0aCA9IDA7CgljaGFyICpkYXRhID0gbnVsbHB0cjsKCQoJdm9pZCBzZXRfZGF0YShjaGFyIGNvbnN0ICpzdHIpIHsKCQlsZW5ndGggPSBzdHJsZW4oc3RyKTsKCQlpZihkYXRhKSB7CgkJCWRlbGV0ZSBkYXRhOwoJCX0KCQlkYXRhID0gc3RyY3B5KG5ldyBjaGFyW2xlbmd0aCsxXSwgc3RyKTsKCX0KcHVibGljOgoJbXlfc3RyaW5nKGNoYXIgY29uc3QgKnN0cikgewoJCXNldF9kYXRhKHN0cik7Cgl9CgkKCW15X3N0cmluZyhteV9zdHJpbmcgY29uc3QgJm90aGVyKTogCgkJbXlfc3RyaW5nKG90aGVyLmNfc3RyKCkpIHt9CgkKCWNoYXIgY29uc3QgKiBjX3N0cigpIGNvbnN0IHsKCQlyZXR1cm4gZGF0YTsKCX0KCQoJc3RyaW5nICZvcGVyYXRvcj0oY2hhciBjb25zdCAqc3RyKSB7CgkJc2V0X2RhdGEoc3RyKTsJCgkJcmV0dXJuICp0aGlzOwoJfQoJCglzdHJpbmcgJm9wZXJhdG9yPShteV9zdHJpbmcgY29uc3QgJm90aGVyKSB7CgkJc2V0X2RhdGEob3RoZXIuY19zdHIoKSk7CgkJcmV0dXJuICp0aGlzOwoJfQoJCgl+bXlfc3RyaW5nKCkgewoJCWRlbGV0ZSBkYXRhOwoJfQoJCglmcmllbmQgb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvdXQsIG15X3N0cmluZyBjb25zdCAmc3RyKSB7CgkJcmV0dXJuIG91dCA8PCBzdHIuY19zdHIoKTsKCX0KCQoJZnJpZW5kIGlzdHJlYW0gJm9wZXJhdG9yPj4oaXN0cmVhbSAmaW4sIG15X3N0cmluZyAmc3RyKSB7CgkJcmV0dXJuIGluOyAvL2plc3RlbSB3IHRyYWtjaWUgb2dsxIVkYW5pYSBkci4gaG91c2UsIGplxZtsaSBjaGNlc3ogc2llIGJhd2ljIHcgcmVsb2thY2plIHRvIHBvd29kem9ua2EKCX0KfTsKCnN0cnVjdCBwZXJzb24gewoJbXlfc3RyaW5nIG5hbWUsIHN1cm5hbWU7CglmcmllbmQgb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvdXQsIHBlcnNvbiBjb25zdCAmcCkgewoJCXJldHVybiBvdXQgPDwgcC5uYW1lIDw8ICIgIiA8PCBwLnN1cm5hbWU7Cgl9Cn07CgppbnQgbWFpbigpIHsKCXBlcnNvbiBwID0gewoJCSJBZGFtIiwgIktvd2Fsc2tpIgoJfTsKCWNvdXQgPDwgcCA8PCBlbmRsOwoJcC5zdXJuYW1lID0gIk1hbGlub3dza2kiOwoJY291dCA8PCBwIDw8IGVuZGw7CglwLm5hbWUgPSBteV9zdHJpbmcoIkphbmVjemVrIik7Cgljb3V0IDw8IHAgPDwgZW5kbDsKCXJldHVybiAwOwp9