Guest User

Untitled

a guest
Jun 19th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.11 KB | None | 0 0
  1. /*
  2. * Schemat dziedziczenia klas
  3. * ZYWNOSC
  4. * / \
  5. * OWOC WARZYWO
  6. * / \ / \
  7. * JABLKO POMARANCZA MARCHEW BURAK
  8. *
  9. */
  10.  
  11. #include <cstdlib>
  12. #include <cstring>
  13. #include <iostream>
  14.  
  15.  
  16. using namespace std;
  17.  
  18. /*** ZYWNOSC ***/
  19.  
  20. /*
  21. * Klasa macierzysta dla pozostalych klas w programie
  22. * Przechowuje informacje o nazwie i wartosci odzywczej danego rodzaju zywnosci
  23. */
  24. class Zywnosc {
  25. protected:
  26. float wartosc_odzywcza;
  27. char * nazwa;
  28. public:
  29.  
  30. Zywnosc(const char * _nazwa, float w_odzywcza) : wartosc_odzywcza(w_odzywcza) {
  31. // przepisanie nazwy do zmiennej wlasnosci
  32. nazwa = new char[strlen(_nazwa)];
  33. strcpy(nazwa, _nazwa);
  34. }
  35. // akcesory wlasnosci
  36.  
  37. float pokaz_w_odzywcza() {
  38. return wartosc_odzywcza;
  39. }
  40.  
  41. char * pokaz_nazwe() {
  42. return nazwa;
  43. }
  44. };
  45.  
  46. // Przeciazony operator wyprowadzenia na strumien wyjsciowy
  47.  
  48. ostream & operator <<(ostream & strumien, Zywnosc z) {
  49. strumien << z.pokaz_nazwe()
  50. << ", wartosc odzywcza: " << z.pokaz_w_odzywcza() << "kcal";
  51. }
  52.  
  53. /*** WARZYWO ***/
  54.  
  55. /*
  56. * Klasa modelujaca warzywa. Rozszerza Zywnosc o informacje czy
  57. * warzywo jest swieze
  58. */
  59. class Warzywo : public Zywnosc {
  60. protected:
  61. bool swieze;
  62. public:
  63.  
  64. Warzywo(const char * _nazwa, float w_odzywcza, bool _swieze) :
  65. Zywnosc(_nazwa, w_odzywcza), swieze(_swieze) {
  66. }
  67.  
  68. bool czy_swieze() {
  69. return swieze;
  70. }
  71. };
  72.  
  73. ostream & operator <<(ostream & strumien, Warzywo w) {
  74. strumien << static_cast<Zywnosc> (w) << (w.czy_swieze() ? ", swieze" : ", mrozone");
  75. }
  76.  
  77. /*** MARCHEW ***/
  78.  
  79. /*
  80. * Klasa marchwi, dziedziczy po Warzywie. Rozszerza je o dlugosc korzenia
  81. * i stosowny akcesor
  82. */
  83. class Marchew : public Warzywo {
  84. protected:
  85. float dlugosc_korzenia;
  86. public:
  87.  
  88. Marchew(float dl_korzenia, float w_odzywcza, bool _swieze) :
  89. Warzywo("Marchew", w_odzywcza, _swieze), dlugosc_korzenia(dl_korzenia) {
  90. }
  91.  
  92. float daj_dl_korzenia() {
  93. return dlugosc_korzenia;
  94. }
  95. };
  96.  
  97. ostream & operator <<(ostream & strumien, Marchew m) {
  98. strumien << static_cast<Warzywo> (m) << endl << "Korzen dlugosci: " << m.daj_dl_korzenia();
  99. }
  100.  
  101.  
  102. /*** BURAK ***/
  103.  
  104. /*
  105. * Dziedziczy po warzywie, rozszerza je o informacje czy jest cukrowy.
  106. * Zapewnia odpowiedni akcesor.
  107. */
  108. class Burak : public Warzywo {
  109. protected:
  110. bool cukrowy;
  111. public:
  112.  
  113. Burak(float _cukrowy, float w_odzywcza, bool _swieze) :
  114. Warzywo("Burak", w_odzywcza, _swieze), cukrowy(_cukrowy) {
  115. }
  116.  
  117. bool czy_cukrowy() {
  118. return cukrowy;
  119. }
  120. };
  121.  
  122. ostream & operator <<(ostream & strumien, Burak b) {
  123. strumien << static_cast<Warzywo> (b) << endl << (b.czy_cukrowy() ? "Nie jest cukrowy" : "Jest cukrowy");
  124. }
  125.  
  126. /*** OWOC ***/
  127.  
  128. /*
  129. * Rozszerza Zywnosc o informacje czy jest cytrusowy i jaka ma witamine.
  130. * Zapewnia odpowiednie akcesory
  131. */
  132. class Owoc : public Zywnosc {
  133. protected:
  134. bool cytrusowy;
  135. char witamina;
  136. public:
  137.  
  138. Owoc(const char * _nazwa, float w_odzywcza, bool _cytrus, char _witamina) :
  139. Zywnosc(_nazwa, w_odzywcza), cytrusowy(_cytrus), witamina(_witamina) {
  140. }
  141.  
  142. bool czy_jest_cytrusem() {
  143. return cytrusowy;
  144. }
  145.  
  146. char pokaz_witamine() {
  147. return witamina;
  148. }
  149. };
  150.  
  151. ostream & operator <<(ostream & strumien, Owoc o) {
  152. strumien << static_cast<Zywnosc> (o) << ", owoc "
  153. << (o.czy_jest_cytrusem() ? "cytrusowy" : "niecytrusowy")
  154. << endl << "Zawiera witamine " << o.pokaz_witamine();
  155. }
  156.  
  157. /*** JABLKO ***/
  158.  
  159. /*
  160. * Modeluje klase jablka rozszerzajac Owoc o wlasnosc odmiana.
  161. */
  162. class Jablko : public Owoc {
  163. private:
  164. char * odmiana;
  165. public:
  166.  
  167. Jablko(const char * _odmiana, float w_odzywcza) :
  168. Owoc("Jablko", w_odzywcza, false, 'D') {
  169. odmiana = new char[strlen(_odmiana)];
  170. strcpy(odmiana, _odmiana);
  171. }
  172.  
  173. char * pokaz_odmiane() {
  174. return odmiana;
  175. }
  176. };
  177.  
  178. ostream & operator <<(ostream & strumien, Jablko j) {
  179. strumien << static_cast<Owoc> (j)
  180. << endl << "Odmiana: " << j.pokaz_odmiane();
  181. }
  182.  
  183. /*** POMARANCZA ***/
  184.  
  185. /*
  186. * Dziedziczy po Owoc, rozszerza go o informacje czy to odmiana bezpestkowa
  187. */
  188. class Pomarancza : public Owoc {
  189. private:
  190. bool bezpestkowa;
  191. public:
  192.  
  193. Pomarancza(bool _bezpestkowa, float w_odzywcza) :
  194. Owoc("Pomarancza", w_odzywcza, true, 'C'),
  195. bezpestkowa(_bezpestkowa) {
  196. }
  197.  
  198. bool czy_bezpestkowa() {
  199. return bezpestkowa;
  200. }
  201. };
  202.  
  203. ostream & operator <<(ostream & strumien, Pomarancza p) {
  204. strumien << static_cast<Owoc> (p)
  205. << endl << "Odmiana " << (p.czy_bezpestkowa() ? "bezpestkowa" : "z pestkami");
  206. }
  207.  
  208. int main(int argc, char** argv) {
  209. Jablko j("reneta królewska", 8);
  210. Pomarancza p(true, 10);
  211. Marchew m(4, 5, false);
  212. Burak b(false, 5, false);
  213. cout << "WPROWADZONA ZYWNOSC:"<< endl
  214. << j << endl << endl
  215. << p << endl << endl
  216. << m << endl << endl
  217. << b << endl;
  218. return (EXIT_SUCCESS);
  219. }
Add Comment
Please, Sign In to add comment