Advertisement
Guest User

Untitled

a guest
Sep 24th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. // Main.cpp
  2. #include <thread>
  3. #include "BaseClass.h"
  4. #include "ChildClass.h"
  5.  
  6. // Объект базового класса
  7. BaseNamespace::BaseClass baseClass;
  8.  
  9. void Show()
  10. {
  11. printf("%urn", ((ChildNamespace::ChildClass *)baseClass.obj)->ShowPrivateInt());
  12. printf("%urn", ((ChildNamespace::ChildClass *)baseClass.obj)->ShowPublicInt()); // Выводит мусор вместо числа: 2
  13. printf("%urn", ((ChildNamespace::ChildClass *)baseClass.obj)->ChildPublicInt); // Выводит мусор вместо числа: 2
  14. }
  15.  
  16. int main()
  17. {
  18. auto th1 = std::thread(Show);
  19. auto th2 = std::thread(Show);
  20.  
  21. th1.join();
  22. th2.join();
  23.  
  24. getchar();
  25. return 0;
  26. }
  27.  
  28. // BaseClass.h
  29. #pragma once
  30.  
  31. namespace BaseNamespace
  32. {
  33. class ChildClass;
  34. class BaseClass
  35. {
  36. public:
  37. BaseClass();
  38. ~BaseClass();
  39. ChildClass *obj;
  40. };
  41. }
  42.  
  43. // BaseClass.cpp
  44. #include "BaseClass.h"
  45. #include "ChildClass.h"
  46.  
  47. namespace BaseNamespace
  48. {
  49. BaseClass::BaseClass()
  50. {
  51. this->obj = (BaseNamespace::ChildClass *)&ChildNamespace::ChildClass((ChildNamespace::BaseClass *)this);
  52. }
  53.  
  54. BaseClass::~BaseClass()
  55. {
  56. }
  57. }
  58.  
  59. // ChildClass.h
  60. #pragma once
  61.  
  62. namespace ChildNamespace
  63. {
  64. class BaseClass;
  65. class ChildClass
  66. {
  67. public:
  68. ChildClass(ChildNamespace::BaseClass *obj);
  69. ~ChildClass();
  70. int ShowPrivateInt();
  71. int ShowPublicInt();
  72.  
  73. BaseClass *baseObj;
  74.  
  75. int ChildPublicInt = 2;
  76. };
  77. }
  78.  
  79. // ChildClass.cpp
  80. #include "ChildClass.h"
  81.  
  82. namespace ChildNamespace
  83. {
  84. int ChildPrivateInt = 7;
  85.  
  86. ChildClass::ChildClass(BaseClass *obj)
  87. {
  88. this->baseObj = obj;
  89. }
  90.  
  91. int ChildClass::ShowPrivateInt()
  92. {
  93. return ChildPrivateInt;
  94. }
  95.  
  96. int ChildClass::ShowPublicInt()
  97. {
  98. return ChildPublicInt;
  99. }
  100.  
  101. ChildClass::~ChildClass()
  102. {
  103. }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement