Advertisement
Guest User

kurwywyjebane

a guest
Dec 18th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.77 KB | None | 0 0
  1. /***********************************************************/
  2. /* Iloczyn klas a konwersja dynamiczna i funkcje wirtualne */
  3. /***********************************************************/
  4.  
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. class Obiekt {
  9. public:
  10. Obiekt()
  11. {}
  12.  
  13. virtual ~Obiekt()
  14. {}
  15.  
  16. enum {_GDI_,_OpenGL_,_DirectX_};
  17. virtual void Rysuj(int srodowisko) = 0;
  18. };
  19.  
  20. class Kolo : public Obiekt {
  21. public:
  22. Kolo()
  23. {}
  24.  
  25. void Rysuj(int srodowisko)
  26. {
  27. cout << "rysuje obiekt kola w srodowisku ";
  28. switch (srodowisko) {
  29. case _GDI_: cout << "GDI" << endl; break;
  30. case _OpenGL_: cout << "OpenGL" << endl; break;
  31. case _DirectX_: cout << "DirectX" << endl; break;
  32. }
  33. }
  34. };
  35.  
  36. class Sfera : public Obiekt {
  37. public:
  38. Sfera()
  39. {}
  40.  
  41. void Rysuj(int srodowisko)
  42. {
  43. cout << "rysuje obiekt sfery w srodowisku ";
  44. switch (srodowisko) {
  45. case _GDI_: cout << "GDI - operacja bledna!" << endl; break;
  46. case _OpenGL_: cout << "OpenGL" << endl; break;
  47. case _DirectX_: cout << "DirectX" << endl; break;
  48. }
  49. }
  50. };
  51.  
  52. class Linia : public Obiekt {
  53. public:
  54. Linia()
  55. {}
  56.  
  57. void Rysuj(int srodowisko)
  58. {
  59. cout << "rysuje obiekt linii w srodowisku ";
  60. switch (srodowisko) {
  61. case _GDI_: cout << "GDI" << endl; break;
  62. case _OpenGL_: cout << "OpenGL" << endl; break;
  63. case _DirectX_: cout << "DirectX" << endl; break;
  64. }
  65. }
  66. };
  67.  
  68. class Forma {
  69. public:
  70. Forma()
  71. {}
  72.  
  73. virtual ~Forma()
  74. {}
  75.  
  76. virtual void Rysuj() = 0;
  77. };
  78.  
  79. class Srodowisko {
  80. public:
  81. Srodowisko()
  82. {}
  83.  
  84. virtual ~Srodowisko()
  85. {}
  86.  
  87. virtual void Rysuj(Obiekt *obiekt) = 0;
  88. virtual Forma *Ujmij(Obiekt *obiekt) = 0;
  89. };
  90.  
  91. class GDI : public Srodowisko {
  92. public:
  93.  
  94. class FormaKola : public Forma {
  95. Kolo *kolo_;
  96. GDI *gdi_;
  97. public:
  98. FormaKola(Kolo *kolo, GDI *gdi):
  99. kolo_(kolo), gdi_(gdi)
  100. {}
  101. void Rysuj()
  102. {
  103. cout << "rysuje obiekt kola w srodowisku GDI" << endl;
  104. }
  105. };
  106.  
  107. class FormaLinii : public Forma {
  108. Linia *linia_;
  109. GDI *gdi_;
  110. public:
  111. FormaLinii(Linia *linia, GDI *gdi):
  112. linia_(linia), gdi_(gdi)
  113. {}
  114. void Rysuj()
  115. {
  116. cout << "rysuje obiekt linii w srodowisku GDI" << endl;
  117. }
  118. };
  119.  
  120. public:
  121. GDI()
  122. {}
  123.  
  124. Forma *Ujmij(Obiekt *obiekt)
  125. {
  126. Kolo *kolo = dynamic_cast<Kolo*>(obiekt);
  127. if (kolo!=NULL) return new FormaKola(kolo,this);
  128. else {
  129. Sfera *sfera = dynamic_cast<Sfera*>(obiekt);
  130. if (sfera!=NULL) { cout << "blad: rysowanie obiektow 3D w srodowisku GDI jest niemozliwe!" << endl; return NULL; }
  131. else {
  132. Linia *linia = dynamic_cast<Linia*>(obiekt);
  133. if (linia!=NULL) return new FormaLinii(linia,this);
  134. else { cout << "blad: nieznany typ obiektu!" << endl; return NULL; }
  135. }
  136. }
  137. }
  138.  
  139. void Rysuj(Obiekt *obiekt)
  140. {
  141. Kolo *kolo = dynamic_cast<Kolo*>(obiekt);
  142. if (kolo!=NULL) rysuj_kolo(kolo);
  143. else {
  144. Sfera *sfera = dynamic_cast<Sfera*>(obiekt);
  145. if (sfera!=NULL) rysuj_sfere(sfera);
  146. else {
  147. Linia *linia = dynamic_cast<Linia*>(obiekt);
  148. if (linia!=NULL) rysuj_linie(linia);
  149. else cout << "blad: nieznany typ obiektu!" << endl;
  150. }
  151. }
  152. }
  153.  
  154. private:
  155.  
  156. void rysuj_kolo(Kolo *kolo)
  157. {
  158. cout << "rysuje obiekt kola w srodoiwsku GDI" << endl;
  159. }
  160.  
  161. void rysuj_sfere(Sfera *sfera)
  162. {
  163. cout << "blad: nie moge rysowac obiektu sfery w srodowisku GDI!" << endl;
  164. }
  165.  
  166. void rysuj_linie(Linia *linia)
  167. {
  168. cout << "rysuje obiekt linii w srodoiwsku GDI" << endl;
  169. }
  170. };
  171.  
  172. class OpenGL : public Srodowisko {
  173. public:
  174.  
  175. class FormaKola : public Forma {
  176. Kolo *kolo_;
  177. OpenGL *opengl_;
  178. public:
  179. FormaKola(Kolo *kolo, OpenGL *gdi):
  180. kolo_(kolo), opengl_(gdi)
  181. {}
  182. void Rysuj()
  183. {
  184. cout << "rysuje obiekt kola w srodowisku OpenGL" << endl;
  185. }
  186. };
  187.  
  188. class FormaSfery : public Forma {
  189. Sfera *sfera_;
  190. OpenGL *opengl_;
  191. public:
  192. FormaSfery(Sfera *sfera, OpenGL *gdi):
  193. sfera_(sfera), opengl_(gdi)
  194. {}
  195. void Rysuj()
  196. {
  197. cout << "rysuje obiekt sfery w srodowisku OpenGL" << endl;
  198. }
  199. };
  200.  
  201. class FormaLinii : public Forma {
  202. Linia *linia_;
  203. OpenGL *opengl_;
  204. public:
  205. FormaLinii(Linia *linia, OpenGL *gdi):
  206. linia_(linia), opengl_(gdi)
  207. {}
  208. void Rysuj()
  209. {
  210. cout << "rysuje obiekt linii w srodowisku OpenGL" << endl;
  211. }
  212. };
  213.  
  214. public:
  215. OpenGL()
  216. {}
  217.  
  218. Forma *Ujmij(Obiekt *obiekt)
  219. {
  220. Kolo *kolo = dynamic_cast<Kolo*>(obiekt);
  221. if (kolo!=NULL) return new FormaKola(kolo,this);
  222. else {
  223. Sfera *sfera = dynamic_cast<Sfera*>(obiekt);
  224. if (sfera!=NULL) return new FormaSfery(sfera,this);
  225. else {
  226. Linia *linia = dynamic_cast<Linia*>(obiekt);
  227. if (linia!=NULL) return new FormaLinii(linia,this);
  228. else { cout << "blad: nieznany typ obiektu!" << endl; return NULL; }
  229. }
  230. }
  231. }
  232.  
  233. void Rysuj(Obiekt *obiekt)
  234. {
  235. Kolo *kolo = dynamic_cast<Kolo*>(obiekt);
  236. if (kolo!=NULL) rysuj_kolo(kolo);
  237. else {
  238. Sfera *sfera = dynamic_cast<Sfera*>(obiekt);
  239. if (sfera!=NULL) rysuj_sfere(sfera);
  240. else {
  241. Linia *linia = dynamic_cast<Linia*>(obiekt);
  242. if (linia!=NULL) rysuj_linie(linia);
  243. else cout << "blad: nieznany typ obiektu!" << endl;
  244. }
  245. }
  246. }
  247.  
  248. private:
  249.  
  250. void rysuj_kolo(Kolo *kolo)
  251. {
  252. cout << "rysuje obiekt kola w srodoiwsku OpenGL" << endl;
  253. }
  254.  
  255. void rysuj_sfere(Sfera *sfera)
  256. {
  257. cout << "rysuje obiekt sfery w srodoiwsku OpenGL" << endl;
  258. }
  259.  
  260. void rysuj_linie(Linia *linia)
  261. {
  262. cout << "rysuje obiekt linii w srodoiwsku OpenGL" << endl;
  263. }
  264. };
  265.  
  266. class DirectX : public Srodowisko {
  267. public:
  268.  
  269. class FormaKola : public Forma {
  270. Kolo *kolo_;
  271. DirectX *directx_;
  272. public:
  273. FormaKola(Kolo *kolo, DirectX *gdi):
  274. kolo_(kolo), directx_(gdi)
  275. {}
  276. void Rysuj()
  277. {
  278. cout << "rysuje obiekt kola w srodowisku DirectX" << endl;
  279. }
  280. };
  281.  
  282. class FormaSfery : public Forma {
  283. Sfera *sfera_;
  284. DirectX *directx_;
  285. public:
  286. FormaSfery(Sfera *sfera, DirectX *gdi):
  287. sfera_(sfera), directx_(gdi)
  288. {}
  289. void Rysuj()
  290. {
  291. cout << "rysuje obiekt sfery w srodowisku DirectX" << endl;
  292. }
  293. };
  294.  
  295. class FormaLinii : public Forma {
  296. Linia *linia_;
  297. DirectX *directx_;
  298. public:
  299. FormaLinii(Linia *linia, DirectX *gdi):
  300. linia_(linia), directx_(gdi)
  301. {}
  302. void Rysuj()
  303. {
  304. cout << "rysuje obiekt linii w srodowisku DirectX" << endl;
  305. }
  306. };
  307.  
  308. public:
  309. DirectX()
  310. {}
  311.  
  312. Forma *Ujmij(Obiekt *obiekt)
  313. {
  314. Kolo *kolo = dynamic_cast<Kolo*>(obiekt);
  315. if (kolo!=NULL) return new FormaKola(kolo,this);
  316. else {
  317. Sfera *sfera = dynamic_cast<Sfera*>(obiekt);
  318. if (sfera!=NULL) return new FormaSfery(sfera,this);
  319. else {
  320. Linia *linia = dynamic_cast<Linia*>(obiekt);
  321. if (linia!=NULL) return new FormaLinii(linia,this);
  322. else { cout << "blad: nieznany typ obiektu!" << endl; return NULL; }
  323. }
  324. }
  325. }
  326.  
  327. void Rysuj(Obiekt *obiekt)
  328. {
  329. Kolo *kolo = dynamic_cast<Kolo*>(obiekt);
  330. if (kolo!=NULL) rysuj_kolo(kolo);
  331. else {
  332. Sfera *sfera = dynamic_cast<Sfera*>(obiekt);
  333. if (sfera!=NULL) rysuj_sfere(sfera);
  334. else {
  335. Linia *linia = dynamic_cast<Linia*>(obiekt);
  336. if (linia!=NULL) rysuj_linie(linia);
  337. else cout << "blad: nieznany typ obiektu!" << endl;
  338. }
  339. }
  340. }
  341.  
  342. private:
  343.  
  344. void rysuj_kolo(Kolo *kolo)
  345. {
  346. cout << "rysuje obiekt kola w srodoiwsku DirectX" << endl;
  347. }
  348.  
  349. void rysuj_sfere(Sfera *sfera)
  350. {
  351. cout << "rysuje obiekt sfery w srodoiwsku DirectX" << endl;
  352. }
  353.  
  354. void rysuj_linie(Linia *linia)
  355. {
  356. cout << "rysuje obiekt linii w srodoiwsku DirectX" << endl;
  357. }
  358. };
  359.  
  360. void RysujWszystkie1(Obiekt *obiekty[],int N)
  361. {
  362. int srodowisko = Obiekt::_GDI_;
  363.  
  364. cout << "Implementacja pierwsza->" << endl;
  365. for (int i=0; i<N; i++)
  366. obiekty[i]->Rysuj(srodowisko);
  367. }
  368.  
  369. void RysujWszystkie2(Obiekt *obiekty[],int N)
  370. {
  371. Srodowisko *srodowisko = new GDI;
  372.  
  373. cout << "Implementacja druga->" << endl;
  374. for (int i=0; i<N; i++)
  375. srodowisko->Rysuj(obiekty[i]);
  376.  
  377. delete srodowisko;
  378. }
  379.  
  380. void RysujWszystkie3(Obiekt *obiekty[],int N)
  381. {
  382. Srodowisko *srodowisko = new GDI;
  383.  
  384. cout << "Implementacja trzecia->" << endl;
  385. for (int i=0; i<N; i++) {
  386. Forma *forma = srodowisko->Ujmij(obiekty[i]);
  387. if (forma!=NULL) {
  388. forma->Rysuj();
  389. delete forma;
  390. }
  391. }
  392.  
  393. delete srodowisko;
  394. }
  395.  
  396. int main()
  397. {
  398. Obiekt *obiekty[] = { new Kolo, new Sfera, new Linia };
  399. int N = sizeof obiekty/sizeof(Obiekt *);
  400.  
  401. RysujWszystkie1(obiekty, N);
  402. cout << endl;
  403.  
  404. RysujWszystkie2(obiekty, N);
  405. cout << endl;
  406.  
  407. RysujWszystkie3(obiekty, N);
  408. cout << endl;
  409.  
  410. return 0;
  411. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement