fork download
  1. #include <iostream>
  2.  
  3. class Parent
  4. {
  5. public:
  6. Parent()
  7. {
  8. Id = new int;
  9. }
  10.  
  11. virtual Parent* Copy()
  12. {
  13. Parent* newParent = new Parent;
  14. *(newParent->Id) = *Id;
  15. return newParent;
  16. }
  17.  
  18. int* Id;
  19. };
  20.  
  21.  
  22. class Child : public Parent
  23. {
  24. public:
  25. Child() : Parent()
  26. {
  27. SchoolId = new int;
  28. }
  29.  
  30. virtual Parent* Copy()
  31. {
  32. Child* newChild = new Child;
  33. *(newChild->Id) = *Id;
  34. *(newChild->SchoolId) = *SchoolId;
  35. return newChild;
  36. }
  37.  
  38. int* SchoolId;
  39. };
  40.  
  41. int main()
  42. {
  43. // Create a derived object
  44. Child child;
  45. *(child.SchoolId) = 2;
  46. std::cout << *(child.SchoolId) << std::endl;
  47.  
  48. // Copy the derived object
  49. Parent* copiedChildBasePointer = child.Copy();
  50. Child* copiedChild = dynamic_cast<Child*>(copiedChildBasePointer);
  51. std::cout << *(copiedChild->SchoolId) << std::endl;
  52.  
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0.01s 2856KB
stdin
Standard input is empty
stdout
2
2