Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Main.cpp
- #include <thread>
- #include "BaseClass.h"
- #include "ChildClass.h"
- // Объект базового класса
- BaseNamespace::BaseClass baseClass;
- void Show()
- {
- printf("%urn", ((ChildNamespace::ChildClass *)baseClass.obj)->ShowPrivateInt());
- printf("%urn", ((ChildNamespace::ChildClass *)baseClass.obj)->ShowPublicInt()); // Выводит мусор вместо числа: 2
- printf("%urn", ((ChildNamespace::ChildClass *)baseClass.obj)->ChildPublicInt); // Выводит мусор вместо числа: 2
- }
- int main()
- {
- auto th1 = std::thread(Show);
- auto th2 = std::thread(Show);
- th1.join();
- th2.join();
- getchar();
- return 0;
- }
- // BaseClass.h
- #pragma once
- namespace BaseNamespace
- {
- class ChildClass;
- class BaseClass
- {
- public:
- BaseClass();
- ~BaseClass();
- ChildClass *obj;
- };
- }
- // BaseClass.cpp
- #include "BaseClass.h"
- #include "ChildClass.h"
- namespace BaseNamespace
- {
- BaseClass::BaseClass()
- {
- this->obj = (BaseNamespace::ChildClass *)&ChildNamespace::ChildClass((ChildNamespace::BaseClass *)this);
- }
- BaseClass::~BaseClass()
- {
- }
- }
- // ChildClass.h
- #pragma once
- namespace ChildNamespace
- {
- class BaseClass;
- class ChildClass
- {
- public:
- ChildClass(ChildNamespace::BaseClass *obj);
- ~ChildClass();
- int ShowPrivateInt();
- int ShowPublicInt();
- BaseClass *baseObj;
- int ChildPublicInt = 2;
- };
- }
- // ChildClass.cpp
- #include "ChildClass.h"
- namespace ChildNamespace
- {
- int ChildPrivateInt = 7;
- ChildClass::ChildClass(BaseClass *obj)
- {
- this->baseObj = obj;
- }
- int ChildClass::ShowPrivateInt()
- {
- return ChildPrivateInt;
- }
- int ChildClass::ShowPublicInt()
- {
- return ChildPublicInt;
- }
- ChildClass::~ChildClass()
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement