Advertisement
RobertDeMilo

YB5.3 Порядок конструирования экземпляров классов

Nov 23rd, 2023
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1. // Если есть некоторая иерархия классов, то при создании объекта, принадлежащего данной иерархии, всегда
  2. // будет сначала вызываться конструктор базового класса, затем класса наследника  и т.д.  по цепочке.
  3. // При этом когда объекты данных классов будут удаляться сначала всегда вызввается объект самого последнего класса
  4. // наследника  и т.д.  по цепочке ввверх пока не дойдем до деструктора самого базового класса.
  5.  
  6. //#include <iostream>
  7. //
  8. //using namespace std;
  9. //
  10. //struct Log
  11. //{
  12. //  Log(string name) : n(name)
  13. //  {
  14. //      cout << "+ " << n << endl;
  15. //  }
  16. //  ~Log()
  17. //  {
  18. //      cout << "- " << n << endl;
  19. //  }
  20. //  string n;
  21. //};
  22. //
  23. //struct Fruit
  24. //{
  25. //  string type = "fruit";
  26. //  Log l = Log("Fruit");
  27. //};
  28. //
  29. //struct Apple : public Fruit
  30. //{
  31. //  Apple()
  32. //  {
  33. //      type = "apple";
  34. //  }
  35. //  Log l = Log("Apple");
  36. //
  37. //};
  38. //---------------------------------------------------------------
  39. //#include <iostream>
  40. //
  41. //using namespace std;
  42. //
  43. //struct Log
  44. //{
  45. //  Log(string name) : n(name)
  46. //  {
  47. //      cout << "+ " << n << endl;
  48. //  }
  49. //  ~Log()
  50. //  {
  51. //      cout << "- " << n << endl;
  52. //  }
  53. //  string n;
  54. //};
  55. //
  56. //struct Fruit
  57. //{
  58. //  Fruit(const string& t): l(t + " (Fruit)")
  59. //  {
  60. //
  61. //  }
  62. //  const Log l;
  63. //};
  64. //
  65. //struct Apple : public Fruit
  66. //{
  67. //  Apple(const string& t) :Fruit(t), l(t)
  68. //  {
  69. //     
  70. //  }
  71. //  const Log l;
  72. //
  73. //};
  74. //---------------------------------------------------------------
  75.  
  76. #include <iostream>
  77.  
  78. using namespace std;
  79.  
  80. struct Log
  81. {
  82.     Log(string name) : n(name)
  83.     {
  84.         cout << "+ " << n << endl;
  85.     }
  86.     ~Log()
  87.     {
  88.         cout << "- " << n << endl;
  89.     }
  90.     string n;
  91. };
  92.  
  93. struct Fruit
  94. {
  95.     Fruit(const string& t) : l(t + " (Fruit)")
  96.     {
  97.  
  98.     }
  99.     const Log l;
  100. };
  101.  
  102. struct Apple : public Fruit
  103. {
  104.     Apple(const string& t) :Fruit(t), l(t)
  105.     {
  106.  
  107.     }
  108.     const Log l;
  109.  
  110. };
  111.  
  112. //class AppleTree
  113. //{
  114. //public:
  115. //  AppleTree() : a1("a1"), a2("a2")
  116. //  {
  117. //
  118. //  }
  119. //  Log l = Log("AppleTree");
  120. //  Apple a1;
  121. //  Apple a2;
  122. //  // Реальный порядок конструирования зависит только от того в каком порядке они перичислены внутри класса
  123. //};
  124.  
  125. class AppleTree
  126. {
  127. public:
  128.     AppleTree(const string& t) : type(t), a1(type + " a1"), a2(type + " a2")
  129.     {
  130.  
  131.     }
  132.     /*Apple a1;
  133.     Apple a2;
  134.     string type;*/
  135.  
  136.     string type;
  137.     Apple a1;
  138.     Apple a2;
  139.    
  140.     // Реальный порядок конструирования зависит только от того в каком порядке они перичислены внутри класса
  141. };
  142.  
  143. int main()
  144. {
  145.     AppleTree at("AppleTree");
  146.    
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement