mituri

[C++] lista zawierajace powiazane obiekty 2 klas

Oct 1st, 2015
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. /*
  2. Rozpatrzmy dwie struktury:
  3. struct kwadrat
  4. {
  5. double bok;
  6. kwadrat(double x): bok(x){}
  7. double pow(){return bok*bok;}
  8. };
  9. struct tygrys
  10. {
  11. string kolor;
  12. double rozmiar;
  13. tygrys(string a, double b):kolor(a), rozmiar(b){}
  14. };
  15.  
  16. Skonstruować listę jednokierunkową, która zawierałaby powiązane obiekty typów kwadrat i tygrys. Napisać program sprawdzający
  17. skonstruowaną listę (Lista np. zawiera trzy obiekty typu tygrys i dwa obiekty typu kwadrat).
  18. */
  19.  
  20. #include "stdafx.h"
  21. #include <iostream>
  22. #include <string>
  23. #include <queue>
  24. #include <fstream>
  25.  
  26.  
  27. class Obiekt{
  28. public:
  29. virtual void drukuj() = 0;
  30. };
  31.  
  32.  
  33. struct kwadrat : public Obiekt{
  34. public:
  35. double bok;
  36. kwadrat(): bok(0){};
  37. kwadrat(double x): bok(x){}
  38. double pow(){return bok*bok;}
  39. void drukuj(){
  40. std::cout << "Kwadrat ma bok o dlugosci: " << bok << " i pole: " << pow() << std::endl;
  41. }
  42.  
  43. };
  44.  
  45. struct tygrys : public Obiekt{
  46. public:
  47. std::string kolor;
  48. double rozmiar;
  49. tygrys():kolor("brak"), rozmiar(0){};
  50. tygrys(std::string a, double b):kolor(a), rozmiar(b){};
  51. void drukuj(){
  52. std::cout << "Tygrys ma kolor: " << kolor << " i rozmiar: " << rozmiar << std::endl;
  53. }
  54. };
  55.  
  56. struct element{
  57. element* nastepny;
  58. void* zawartosc;
  59. }typedef element;
  60.  
  61. class Lista{
  62. element* glowa;
  63. element* biezacy;
  64.  
  65. public:
  66. Lista(){
  67. glowa = NULL;
  68. biezacy = glowa;
  69. }
  70. ~Lista(){
  71. element* nast;
  72. biezacy = glowa;
  73. while(biezacy != NULL){
  74. nast = biezacy->nastepny;
  75. delete biezacy;
  76. biezacy = nast;
  77. }
  78. }
  79.  
  80. void dodaj(void* nowy){
  81.  
  82. element *wskElem = new element;
  83. wskElem->nastepny = glowa;
  84. wskElem->zawartosc = nowy;
  85. glowa = wskElem;
  86. }
  87.  
  88. void pierwszy () {
  89. biezacy = glowa;
  90. }
  91.  
  92. int koniec(){
  93. return (biezacy == NULL);
  94. }
  95.  
  96. void* kolejny(){
  97. void* wskNast = NULL;
  98. if(biezacy != NULL){
  99. wskNast = biezacy->zawartosc;
  100. biezacy = biezacy->nastepny;
  101. }
  102. return wskNast;
  103. }
  104.  
  105. void drukujListe(){
  106. Obiekt * wskOb;
  107. pierwszy();
  108. while( !koniec() ){
  109. wskOb = (Obiekt*) kolejny();
  110. wskOb->drukuj();
  111. }
  112.  
  113. }
  114. };
  115.  
  116.  
  117. int main(){
  118.  
  119. kwadrat k1(2),k2(4);
  120. tygrys t1("czarny", 1.80),t2("pomaranczowy", 2.20),t3("brazowy", 1.95);
  121.  
  122. Lista l;
  123. l.dodaj(&k1);
  124. l.dodaj(&t1);
  125. l.dodaj(&k2);
  126. l.dodaj(&t2);
  127. l.dodaj(&t3);
  128.  
  129. l.drukujListe();
  130.  
  131. system("PAUSE");
  132. }
Advertisement
Add Comment
Please, Sign In to add comment