#include <iostream>
class Parent
{
public:
Parent()
{
Id = new int;
}
virtual Parent* Copy()
{
Parent* newParent = new Parent;
*(newParent->Id) = *Id;
return newParent;
}
int* Id;
};
class Child : public Parent
{
public:
Child() : Parent()
{
SchoolId = new int;
}
virtual Parent* Copy()
{
Child* newChild = new Child;
*(newChild->Id) = *Id;
*(newChild->SchoolId) = *SchoolId;
return newChild;
}
int* SchoolId;
};
int main()
{
// Create a derived object
Child child;
*(child.SchoolId) = 2;
std::cout << *(child.SchoolId) << std::endl;
// Copy the derived object
Parent* copiedChildBasePointer = child.Copy();
Child* copiedChild = dynamic_cast<Child*>(copiedChildBasePointer);
std::cout << *(copiedChild->SchoolId) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgUGFyZW50CnsKcHVibGljOgogIFBhcmVudCgpCiAgewogICAgSWQgPSBuZXcgaW50OwogIH0KCiAgdmlydHVhbCBQYXJlbnQqIENvcHkoKQogIHsKICAgIFBhcmVudCogbmV3UGFyZW50ID0gbmV3IFBhcmVudDsKICAgICoobmV3UGFyZW50LT5JZCkgPSAqSWQ7CiAgICByZXR1cm4gbmV3UGFyZW50OwogIH0KCiAgaW50KiBJZDsKfTsKCgpjbGFzcyBDaGlsZCA6IHB1YmxpYyBQYXJlbnQKewpwdWJsaWM6CiAgQ2hpbGQoKSA6IFBhcmVudCgpCiAgewogICAgU2Nob29sSWQgPSBuZXcgaW50OwogIH0KCiAgdmlydHVhbCBQYXJlbnQqIENvcHkoKQogIHsKICAgIENoaWxkKiBuZXdDaGlsZCA9IG5ldyBDaGlsZDsKICAgICoobmV3Q2hpbGQtPklkKSA9ICpJZDsKICAgICoobmV3Q2hpbGQtPlNjaG9vbElkKSA9ICpTY2hvb2xJZDsKICAgIHJldHVybiBuZXdDaGlsZDsKICB9CgogIGludCogU2Nob29sSWQ7Cn07CgppbnQgbWFpbigpCnsKICAvLyBDcmVhdGUgYSBkZXJpdmVkIG9iamVjdAogIENoaWxkIGNoaWxkOwogICooY2hpbGQuU2Nob29sSWQpID0gMjsKICBzdGQ6OmNvdXQgPDwgKihjaGlsZC5TY2hvb2xJZCkgPDwgc3RkOjplbmRsOwoKICAvLyBDb3B5IHRoZSBkZXJpdmVkIG9iamVjdAogIFBhcmVudCogY29waWVkQ2hpbGRCYXNlUG9pbnRlciA9IGNoaWxkLkNvcHkoKTsKICBDaGlsZCogY29waWVkQ2hpbGQgPSBkeW5hbWljX2Nhc3Q8Q2hpbGQqPihjb3BpZWRDaGlsZEJhc2VQb2ludGVyKTsKICBzdGQ6OmNvdXQgPDwgKihjb3BpZWRDaGlsZC0+U2Nob29sSWQpIDw8IHN0ZDo6ZW5kbDsKCiAgcmV0dXJuIDA7Cn0K