#include <xtd/xtd>
class id_info : public object {
public:
int id_number = 0;
explicit id_info(int id_number) : id_number {id_number} {}
};
class person : public object {
public:
int age = 0;
ptr<string> name = new_ptr<string>();
ptr<::id_info> id_info = new_ptr<::id_info>(0);
uptr<person> shallow_copy() {
return memberwise_clone<person>();
}
uptr<person> deep_copy() {
auto other = memberwise_clone<person>();
other->id_info = new_ptr<::id_info>(this->id_info->id_number);
other->name = new_ptr<string>(*name);
}
};
void display_values(const person p) {
console::write_line(
" name: {0:s}, age: {1:d}", *
p.name,
p.age);
console::write_line(
" value: {0:d}",
p.id_info->id_number);
}
auto main() -> int {
auto p1 = new_uptr<person>();
p1->age = 42;
*p1->name = "Sam";
*p1->id_info = id_info {6565};
auto p2 = p1->shallow_copy();
console::write_line("Original values of p1 and p2:");
console::write_line(" p1 instance values: ");
display_values(*p1);
console::write_line(" p2 instance values:");
display_values(*p2);
p1->age = 32;
*p1->name = "Frank";
p1->id_info->id_number = 7878;
console::write_line("\nValues of p1 and p2 after changes to p1:");
console::write_line(" p1 instance values: ");
display_values(*p1);
console::write_line(" p2 instance values:");
display_values(*p2);
auto p3 = p1->deep_copy();
*p1->name = "George";
p1->age = 39;
p1->id_info->id_number = 8641;
console::write_line("\nValues of p1 and p3 after changes to p1:");
console::write_line(" p1 instance values: ");
display_values(*p1);
console::write_line(" p3 instance values:");
display_values(*p3);
}
@ other
The operating system is other.
Definition platform_id.hpp:58
@ p
The P key.
Definition console_key.hpp:118