mituri

[C++] klasy dziedziczace

Oct 1st, 2015
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.37 KB | None | 0 0
  1. /*
  2.  
  3. Zdefiniować klasę bazową Samochod. W klasie mają być informacje o marce (typ string), pojemności silnika (typ int), przebiegu (double) i właścicielu samochodu (typ osoba, utworzony zgodnie ze wskazówkami poniżej).
  4. Utworzyć dwie klasy pochodne Osobowy i Ciezarowy.
  5. Klasa Osobowy ma dodatkowe składowe takie jak: liczba pasażerów (typ int), pojemność bagażnika (typ double), liczba drzwi (typ int).
  6. Klasa Ciezarowy powinna mieć dodatkowe składowe: ładowność (typ double), liczba osi (typ int), informacja o tym, czy posiada urządzenie samowyładowacz (tak/nie, typ bool).
  7. Zapewnić klasom rozsądną liczbę potrzebnych konstruktorów, funkcji dostępu i modyfikacji, przeciążony operator przypisania i konstruktor kopiujący.
  8. Napisać program testujący opracowane klasy a następnie program demonstracyjny, w którym w tablicy przechowywane będą dane wszystkich samochodów na stanie (co najmniej dwa samochody osobowe i dwa samochody ciężarowe) i użytkownik będzie miał możliwość:
  9. a) wyświetlenia informacji o posiadanych samochodach.
  10. b) wyświetlenie informacji o wybranych samochodach według ustalonego kryterium
  11. Klasa Osoba powinna mieć postać podaną poniżej.
  12. class Osoba {
  13. string nazwisko;
  14. public:
  15. Osoba();
  16. Osoba(string n);
  17. Osoba(const Osoba& os);
  18. string czytaj_nazwisko() const;
  19. Osoba& operator=(const Osoba& os);
  20. friend istream& operator>>(istream& we, Osoba& os);
  21. friend osteram& operator<<(ostare& wy, const Osoba& os);
  22. };
  23.  
  24. */
  25.  
  26. #include "stdafx.h"
  27. #include <iostream>
  28. #include <string>
  29. #include <queue>
  30. #include <fstream>
  31. #include <vector>
  32.  
  33. using namespace::std;
  34.  
  35. class Osoba{
  36. string nazwisko;
  37. public:
  38. Osoba(): nazwisko("brak"){};
  39. Osoba(string n): nazwisko(n){};
  40. Osoba(const Osoba& os):nazwisko(os.nazwisko){};
  41.  
  42. string czytajNazwisko()const{
  43. return nazwisko;
  44. }
  45.  
  46. Osoba& operator=(const Osoba& os){
  47. if(this == &os) return *this;
  48. else nazwisko = os.nazwisko;
  49. }
  50.  
  51. friend istream& operator>>(istream& we, Osoba& os){
  52. we >> os.nazwisko;
  53. return we;
  54. }
  55. friend ostream& operator<<(ostream& wy, const Osoba &os){
  56. wy << os.nazwisko;
  57. return wy;
  58. }
  59. };
  60.  
  61. class Samochod{
  62.  
  63. string marka;
  64. int pojSilnika;
  65. double przebieg;
  66. Osoba* wlasciciel;
  67.  
  68. public:
  69. Samochod( string markaX = "brak", int pojSilnikaX = 0, double przebiegX = 0, Osoba* wlascicielX = NULL){
  70. marka = markaX;
  71. pojSilnika = pojSilnikaX;
  72. przebieg = przebiegX;
  73. wlasciciel = wlascicielX;
  74. }
  75. Samochod(const Samochod &sam){
  76. marka = sam.marka;
  77. pojSilnika = sam.pojSilnika;
  78. przebieg = sam.przebieg;
  79. wlasciciel = sam.wlasciciel;
  80. }
  81.  
  82. Samochod& operator=(const Samochod& sam){
  83. if(this == &sam) return *this;
  84. else{
  85. marka = sam.marka;
  86. pojSilnika = sam.pojSilnika;
  87. przebieg = sam.przebieg;
  88. wlasciciel = sam.wlasciciel;
  89. }
  90. }
  91.  
  92. string podajWlasciciela()const{
  93. string tmp = wlasciciel->czytajNazwisko();
  94. return tmp;
  95. }
  96.  
  97. int zwrocPojSilnika(){
  98. return pojSilnika;
  99. }
  100. double zwrocPrzebieg(){
  101. return przebieg;
  102. }
  103.  
  104. virtual void pokaz(){
  105. cout <<"Marka: "<< marka << endl <<
  106. "pojemnosc silnika: " << pojSilnika << endl <<
  107. "przebieg: " << przebieg << endl <<
  108. "wlasciciel: " << wlasciciel->czytajNazwisko()<< endl;
  109. }
  110. };
  111.  
  112. class Osobowy : public Samochod{
  113. int lPasazerow;
  114. double pojBagaznika;
  115. int lDrzwi;
  116. public:
  117. Osobowy(string markaX = "brak", int pojSilnikaX = 0, double przebiegX = 0, Osoba* wlascicielX = NULL, int lPasazerowX = 0,
  118. double pojBagaznikaX = 0, int lDrzwiX = 0 ) : Samochod(markaX, pojSilnikaX,przebiegX,wlascicielX){
  119.  
  120. lPasazerow = lPasazerowX;
  121. pojBagaznika = pojBagaznikaX;
  122. lDrzwi = lDrzwiX;
  123. };
  124.  
  125. Osobowy(const Osobowy& osob): Samochod(osob){
  126. lPasazerow = osob.lPasazerow;
  127. pojBagaznika = osob.pojBagaznika;
  128. lDrzwi = osob.lDrzwi;
  129. }
  130.  
  131. Osobowy& operator = (const Osobowy& osob){
  132. if(this == &osob) return *this;
  133. else{
  134. Samochod::operator=(osob);
  135. lPasazerow = osob.lPasazerow;
  136. pojBagaznika = osob.pojBagaznika;
  137. lDrzwi = osob.lDrzwi;
  138. }
  139. }
  140.  
  141. virtual void pokaz(){
  142. Samochod::pokaz();
  143. cout << "liczba pasazerow: " <<lPasazerow << endl <<
  144. "pojemnosc bagaznika: " << pojBagaznika << endl <<
  145. "liczba drzwi: " << lDrzwi << "\n\n";
  146. }
  147. };
  148.  
  149. class Ciezarowy : public Samochod{
  150. double ladownosc;
  151. int lOsi;
  152. bool samowyladowywacz;
  153. public:
  154. Ciezarowy(string markaX = "brak", int pojSilnikaX = 0, double przebiegX = 0, Osoba* wlascicielX = NULL, double ladownoscX = 0,
  155. int lOsiX = 0, bool samowyladowywaczX = NULL) : Samochod(markaX, pojSilnikaX,przebiegX,wlascicielX) {
  156.  
  157. ladownosc = ladownoscX;
  158. lOsi = lOsiX;
  159. samowyladowywacz = samowyladowywaczX;
  160. }
  161. Ciezarowy(const Ciezarowy &ciez) : Samochod(ciez){
  162. ladownosc = ciez.ladownosc;
  163. lOsi = ciez.lOsi;
  164. samowyladowywacz = ciez.samowyladowywacz;
  165. }
  166.  
  167. Ciezarowy& operator = (const Ciezarowy& ciez){
  168. if(this == &ciez) return *this;
  169. else{
  170. Samochod::operator=(ciez);
  171. ladownosc = ciez.ladownosc;
  172. lOsi = ciez.lOsi;
  173. samowyladowywacz = ciez.samowyladowywacz;
  174. }
  175. }
  176.  
  177. virtual void pokaz(){
  178.  
  179. Samochod::pokaz();
  180. string tmp;
  181. if(samowyladowywacz) tmp = "posiada"; else tmp = "nie posiada";
  182. cout << "ladownosc: " << ladownosc << endl <<
  183. "liczba osi: " << lOsi << endl <<
  184. "samowyladowywacz: " << tmp << "\n\n";
  185. }
  186. };
  187.  
  188. void pokazTab(Samochod *tab[], int size){
  189. for (int i = 0; i < size; i++){
  190. tab[i]->pokaz();
  191. }
  192. }
  193.  
  194. void pokazMojeSamochody(string nazwisko, Samochod *tab[], int size){
  195. cout << "Samochody wlasciciela " << nazwisko << ": " << endl;
  196. for (int i = 0; i < size; i++){
  197. if(tab[i]->podajWlasciciela() == nazwisko) tab[i]->pokaz();
  198. }
  199. }
  200.  
  201. void pokazSamochodyWgKryterium(string nazwisko, Samochod *tab[], int size, int kryterium){
  202.  
  203. if(kryterium != 1 && kryterium != 2){
  204. return;
  205. }
  206. double max = 0, min = 100;
  207. int index = 0;
  208. switch(kryterium){
  209. case 1 : //najwieksza pojemnosc silnika
  210. for (int i = 0; i < size; i++){
  211. if(tab[i]->podajWlasciciela() == nazwisko){
  212. if(tab[i]->zwrocPojSilnika() > max){
  213. index = i;
  214. }
  215. }
  216. }
  217. cout << "Najwieksza pojemnosc silnika ma: \n";
  218. break;
  219. case 2: // najmniejszy przebieg
  220. for (int i = 0; i < size; i++){
  221. if(tab[i]->podajWlasciciela() == nazwisko){
  222. if(tab[i]->zwrocPrzebieg() < min){
  223. index = i;
  224. }
  225. }
  226. } cout << "Najmniejszy przebieg ma: \n";
  227. break;
  228. }
  229. for (int i = 0; i < size; i++){
  230. if( i == index) tab[i]->pokaz();
  231. }
  232. }
  233.  
  234.  
  235. int _tmain(int argc, _TCHAR* argv[]){
  236.  
  237. Osoba jacek("kowalski"), piotrek("krawczyk");
  238.  
  239. Osobowy osob1("opel", 2, 4.5, &jacek, 3,6,9);
  240. Osobowy osob2("audi", 3, 6.5, &piotrek, 6, 4,5);
  241. osob1.pokaz();
  242. osob2.pokaz();
  243.  
  244. Ciezarowy ciez1("tir", 3, 3.6, &piotrek, 7 ,8, true);
  245. Ciezarowy ciez2("man", 4, 3, &jacek, 8 ,9, false);
  246. ciez1.pokaz();
  247. ciez2.pokaz();
  248.  
  249. cout << "##################### pokaz funkcje pokazujaca wszystkie samochody w tabelce" << endl;
  250.  
  251. Samochod * tab[] = {new Osobowy(osob1), new Ciezarowy(ciez1), new Osobowy(osob2), new Ciezarowy(ciez2)};
  252. int tabSize = 4;
  253.  
  254. pokazTab(tab,tabSize);
  255.  
  256. cout << "##################### pokaz samochody dla danego wlasciciela" << endl;
  257.  
  258. pokazMojeSamochody("kowalski", tab, tabSize);
  259.  
  260. cout << "##################### kryterium" << endl;
  261.  
  262. /*
  263. kryterium #1 najwieksza pojemnosc silnika
  264. kryterium #2 najmniejszy przebieg
  265. */
  266.  
  267. pokazSamochodyWgKryterium("kowalski", tab, tabSize, 1);
  268.  
  269. system("PAUSE");
  270. }
Advertisement
Add Comment
Please, Sign In to add comment