Guest User

Untitled

a guest
Jun 21st, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class OuterClass
  4. {
  5. public:
  6. OuterClass()
  7. {
  8. std::cout << "OuterClass Constructor" << std::endl;
  9. }
  10. ~OuterClass()
  11. {
  12. std::cout << "OuterClass Destructor" << std::endl;
  13. }
  14. OuterClass(const OuterClass & rhs)
  15. {
  16. std::cout << "OuterClass Copy" << std::endl;
  17. }
  18. OuterClass & operator=(const OuterClass & rhs)
  19. {
  20. std::cout << "OuterClass Assignment" << std::endl;
  21. }
  22.  
  23. class InnerClass
  24. {
  25. public:
  26. InnerClass() : m_int(0)
  27. {
  28. std::cout << "InnerClass Constructor" << std::endl;
  29. }
  30. InnerClass(const InnerClass & rhs) : m_int(rhs.m_int)
  31. {
  32. std::cout << "InnerClass Copy" << std::endl;
  33. }
  34. InnerClass & operator=(const InnerClass & rhs)
  35. {
  36. std::cout << "InnerClass Assignment" << std::endl;
  37. m_int = rhs.m_int;
  38. return *this;
  39. }
  40. ~InnerClass()
  41. {
  42. std::cout << "InnerClass Destructor" << std::endl;
  43. }
  44. void sayHello()
  45. {
  46. std::cout << "Hello!" << std::endl;
  47. }
  48.  
  49. private:
  50. int m_int;
  51. };
  52.  
  53. InnerClass innerClass()
  54. {
  55. InnerClass ic;
  56. std::cout << "innerClass() method" << std::endl;
  57. return ic;
  58. }
  59. };
  60.  
  61. #include "innerclass.hpp"
  62.  
  63. int main(void)
  64. {
  65. std::cout << std::endl << "1st try:" << std::endl;
  66.  
  67.  
  68. OuterClass oc;
  69. OuterClass oc2(oc);
  70. oc.innerClass().sayHello();
  71.  
  72. std::cout << std::endl << "2nd try:" << std::endl;
  73.  
  74. OuterClass::InnerClass ic(oc.innerClass());
  75. ic = oc.innerClass();
  76. }
  77.  
  78. 1st try:
  79. OuterClass Constructor
  80. OuterClass Copy
  81. InnerClass Constructor
  82. innerClass() method
  83. Hello!
  84. InnerClass Destructor
  85.  
  86. 2nd try:
  87. InnerClass Constructor
  88. innerClass() method
  89. InnerClass Constructor
  90. innerClass() method
  91. InnerClass Assignment
  92. InnerClass Destructor
  93. InnerClass Destructor
  94. OuterClass Destructor
  95. OuterClass Destructor
  96.  
  97. InnerClass innerClass() {
  98. InnerClass ic;
  99. std::cout << "innerClass() method" << std::endl;
  100. return ic; // this might not call copy ctor
  101. }
  102.  
  103. Object SomeFunc() {
  104. Object o1 = ...
  105. return Object(o1);
  106. }
  107.  
  108. OuterClass(const OuterClass & rhs)
  109. {
  110. std::cout << "OuterClass Constructor" << std::endl;
  111. ==>
  112. std::cout << "OuterClass Copy Constructor" << std::endl;
  113.  
  114. }
  115.  
  116. OuterClass & operator=(const OuterClass & rhs)
  117. {
  118. std::cout << "OuterClass Constructor" << std::endl;
  119. ==>
  120. std::cout << "OuterClass Assignment operator" << std::endl;
  121. }
  122.  
  123. InnerClass innerClass()
  124. {
  125. InnerClass ic;
  126. std::cout << "innerClass() method" << std::endl;
  127. return ic;
  128. }
  129.  
  130. void innerClass( InnerClass &namedResult)
  131.  
  132. {
  133. std::cout << "innerClass() method" << std::endl;
  134.  
  135. }
  136.  
  137. MyObject(const MyObject&)
  138.  
  139. MyObject m1;
  140. MyObject m2(m1);
Add Comment
Please, Sign In to add comment