fork download
  1. #include <stdio.h>
  2.  
  3. #include<iostream>
  4.  
  5. using namespace std;
  6.  
  7. class Mammal
  8.  
  9. {
  10.  
  11. public:
  12.  
  13. Mammal() : itsAge(1) {printf("\nKONSTRUKTOR Mammal %p\n",this);}
  14.  
  15. Mammal(int Age) : itsAge(Age) {printf("\nKONSTRUKTOR Mammal 2 %p\n",this);}
  16.  
  17. virtual ~Mammal() {printf("\nDESTRUKTOR Mammal %p\n",this);}
  18.  
  19. Mammal(const Mammal & rhs);
  20.  
  21. virtual void Speak() const {printf("\nMammal speak! %p\n",this);}
  22.  
  23. int GetAge() const {printf("\nMammal GetAge() %p\n",this); return itsAge;}
  24.  
  25. virtual Mammal * clone() const
  26.  
  27. {
  28. printf("\nMammal Clone() %p\n",this);
  29.  
  30. return new Mammal(*this);
  31. }
  32.  
  33. protected:
  34.  
  35. int itsAge;
  36. };
  37.  
  38. Mammal :: Mammal(const Mammal & rhs) : itsAge(rhs. GetAge())
  39.  
  40. {printf("\nKONSTRUKTOR COPY Mammal this = %p &rhs = %p\n",this,&rhs);}
  41.  
  42. class Dog : public Mammal
  43.  
  44. {
  45.  
  46. public:
  47.  
  48. Dog() {printf("\nKONSTRUKTOR Dog %p\n",this);}
  49.  
  50. Dog(int Age) : Mammal(Age) {printf("\nKONSTRUKTOR Dog 2 %p\n",this);}
  51.  
  52. virtual ~Dog() {printf("\nDESTRUKTOR Dog %p\n",this);}
  53.  
  54. Dog(const Dog & rhs);
  55.  
  56. void Speak() const {printf("\nWoof! %p\n",this);}
  57.  
  58. virtual Dog * clone() const
  59. {
  60. return new Dog(*this);
  61. }
  62. };
  63.  
  64. Dog :: Dog(const Dog & rhs) : Mammal(rhs)
  65.  
  66. {printf("\nKONSTRUKTOR COPY Dog this = %p &rhs = %p\n",this,&rhs);}
  67.  
  68.  
  69.  
  70. int main()
  71.  
  72. {
  73. Mammal *ptr;
  74.  
  75.  
  76. printf("\n*****************\n");
  77.  
  78. ptr = new Dog(45);
  79.  
  80. printf("\n*** ptr = %p\n",ptr);
  81.  
  82. printf("\n*** Age = %d\n",ptr->GetAge());
  83.  
  84. Mammal * A = ptr -> clone();
  85.  
  86. printf("\n*** A = %p\n",A);
  87.  
  88. printf("\n*** Age = %d\n",A->GetAge());
  89.  
  90.  
  91.  
  92. return 0;
  93. }
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
*****************

KONSTRUKTOR Mammal 2 0x8a14008

KONSTRUKTOR Dog 2 0x8a14008

*** ptr = 0x8a14008

Mammal GetAge() 0x8a14008

*** Age = 45

Mammal GetAge() 0x8a14008

KONSTRUKTOR COPY Mammal this = 0x8a14018 &rhs = 0x8a14008

KONSTRUKTOR COPY Dog this = 0x8a14018 &rhs = 0x8a14008

*** A = 0x8a14018

Mammal GetAge() 0x8a14018

*** Age = 45