Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 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).
- Utworzyć dwie klasy pochodne Osobowy i Ciezarowy.
- Klasa Osobowy ma dodatkowe składowe takie jak: liczba pasażerów (typ int), pojemność bagażnika (typ double), liczba drzwi (typ int).
- 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).
- Zapewnić klasom rozsądną liczbę potrzebnych konstruktorów, funkcji dostępu i modyfikacji, przeciążony operator przypisania i konstruktor kopiujący.
- 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ść:
- a) wyświetlenia informacji o posiadanych samochodach.
- b) wyświetlenie informacji o wybranych samochodach według ustalonego kryterium
- Klasa Osoba powinna mieć postać podaną poniżej.
- class Osoba {
- string nazwisko;
- public:
- Osoba();
- Osoba(string n);
- Osoba(const Osoba& os);
- string czytaj_nazwisko() const;
- Osoba& operator=(const Osoba& os);
- friend istream& operator>>(istream& we, Osoba& os);
- friend osteram& operator<<(ostare& wy, const Osoba& os);
- };
- */
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <queue>
- #include <fstream>
- #include <vector>
- using namespace::std;
- class Osoba{
- string nazwisko;
- public:
- Osoba(): nazwisko("brak"){};
- Osoba(string n): nazwisko(n){};
- Osoba(const Osoba& os):nazwisko(os.nazwisko){};
- string czytajNazwisko()const{
- return nazwisko;
- }
- Osoba& operator=(const Osoba& os){
- if(this == &os) return *this;
- else nazwisko = os.nazwisko;
- }
- friend istream& operator>>(istream& we, Osoba& os){
- we >> os.nazwisko;
- return we;
- }
- friend ostream& operator<<(ostream& wy, const Osoba &os){
- wy << os.nazwisko;
- return wy;
- }
- };
- class Samochod{
- string marka;
- int pojSilnika;
- double przebieg;
- Osoba* wlasciciel;
- public:
- Samochod( string markaX = "brak", int pojSilnikaX = 0, double przebiegX = 0, Osoba* wlascicielX = NULL){
- marka = markaX;
- pojSilnika = pojSilnikaX;
- przebieg = przebiegX;
- wlasciciel = wlascicielX;
- }
- Samochod(const Samochod &sam){
- marka = sam.marka;
- pojSilnika = sam.pojSilnika;
- przebieg = sam.przebieg;
- wlasciciel = sam.wlasciciel;
- }
- Samochod& operator=(const Samochod& sam){
- if(this == &sam) return *this;
- else{
- marka = sam.marka;
- pojSilnika = sam.pojSilnika;
- przebieg = sam.przebieg;
- wlasciciel = sam.wlasciciel;
- }
- }
- string podajWlasciciela()const{
- string tmp = wlasciciel->czytajNazwisko();
- return tmp;
- }
- int zwrocPojSilnika(){
- return pojSilnika;
- }
- double zwrocPrzebieg(){
- return przebieg;
- }
- virtual void pokaz(){
- cout <<"Marka: "<< marka << endl <<
- "pojemnosc silnika: " << pojSilnika << endl <<
- "przebieg: " << przebieg << endl <<
- "wlasciciel: " << wlasciciel->czytajNazwisko()<< endl;
- }
- };
- class Osobowy : public Samochod{
- int lPasazerow;
- double pojBagaznika;
- int lDrzwi;
- public:
- Osobowy(string markaX = "brak", int pojSilnikaX = 0, double przebiegX = 0, Osoba* wlascicielX = NULL, int lPasazerowX = 0,
- double pojBagaznikaX = 0, int lDrzwiX = 0 ) : Samochod(markaX, pojSilnikaX,przebiegX,wlascicielX){
- lPasazerow = lPasazerowX;
- pojBagaznika = pojBagaznikaX;
- lDrzwi = lDrzwiX;
- };
- Osobowy(const Osobowy& osob): Samochod(osob){
- lPasazerow = osob.lPasazerow;
- pojBagaznika = osob.pojBagaznika;
- lDrzwi = osob.lDrzwi;
- }
- Osobowy& operator = (const Osobowy& osob){
- if(this == &osob) return *this;
- else{
- Samochod::operator=(osob);
- lPasazerow = osob.lPasazerow;
- pojBagaznika = osob.pojBagaznika;
- lDrzwi = osob.lDrzwi;
- }
- }
- virtual void pokaz(){
- Samochod::pokaz();
- cout << "liczba pasazerow: " <<lPasazerow << endl <<
- "pojemnosc bagaznika: " << pojBagaznika << endl <<
- "liczba drzwi: " << lDrzwi << "\n\n";
- }
- };
- class Ciezarowy : public Samochod{
- double ladownosc;
- int lOsi;
- bool samowyladowywacz;
- public:
- Ciezarowy(string markaX = "brak", int pojSilnikaX = 0, double przebiegX = 0, Osoba* wlascicielX = NULL, double ladownoscX = 0,
- int lOsiX = 0, bool samowyladowywaczX = NULL) : Samochod(markaX, pojSilnikaX,przebiegX,wlascicielX) {
- ladownosc = ladownoscX;
- lOsi = lOsiX;
- samowyladowywacz = samowyladowywaczX;
- }
- Ciezarowy(const Ciezarowy &ciez) : Samochod(ciez){
- ladownosc = ciez.ladownosc;
- lOsi = ciez.lOsi;
- samowyladowywacz = ciez.samowyladowywacz;
- }
- Ciezarowy& operator = (const Ciezarowy& ciez){
- if(this == &ciez) return *this;
- else{
- Samochod::operator=(ciez);
- ladownosc = ciez.ladownosc;
- lOsi = ciez.lOsi;
- samowyladowywacz = ciez.samowyladowywacz;
- }
- }
- virtual void pokaz(){
- Samochod::pokaz();
- string tmp;
- if(samowyladowywacz) tmp = "posiada"; else tmp = "nie posiada";
- cout << "ladownosc: " << ladownosc << endl <<
- "liczba osi: " << lOsi << endl <<
- "samowyladowywacz: " << tmp << "\n\n";
- }
- };
- void pokazTab(Samochod *tab[], int size){
- for (int i = 0; i < size; i++){
- tab[i]->pokaz();
- }
- }
- void pokazMojeSamochody(string nazwisko, Samochod *tab[], int size){
- cout << "Samochody wlasciciela " << nazwisko << ": " << endl;
- for (int i = 0; i < size; i++){
- if(tab[i]->podajWlasciciela() == nazwisko) tab[i]->pokaz();
- }
- }
- void pokazSamochodyWgKryterium(string nazwisko, Samochod *tab[], int size, int kryterium){
- if(kryterium != 1 && kryterium != 2){
- return;
- }
- double max = 0, min = 100;
- int index = 0;
- switch(kryterium){
- case 1 : //najwieksza pojemnosc silnika
- for (int i = 0; i < size; i++){
- if(tab[i]->podajWlasciciela() == nazwisko){
- if(tab[i]->zwrocPojSilnika() > max){
- index = i;
- }
- }
- }
- cout << "Najwieksza pojemnosc silnika ma: \n";
- break;
- case 2: // najmniejszy przebieg
- for (int i = 0; i < size; i++){
- if(tab[i]->podajWlasciciela() == nazwisko){
- if(tab[i]->zwrocPrzebieg() < min){
- index = i;
- }
- }
- } cout << "Najmniejszy przebieg ma: \n";
- break;
- }
- for (int i = 0; i < size; i++){
- if( i == index) tab[i]->pokaz();
- }
- }
- int _tmain(int argc, _TCHAR* argv[]){
- Osoba jacek("kowalski"), piotrek("krawczyk");
- Osobowy osob1("opel", 2, 4.5, &jacek, 3,6,9);
- Osobowy osob2("audi", 3, 6.5, &piotrek, 6, 4,5);
- osob1.pokaz();
- osob2.pokaz();
- Ciezarowy ciez1("tir", 3, 3.6, &piotrek, 7 ,8, true);
- Ciezarowy ciez2("man", 4, 3, &jacek, 8 ,9, false);
- ciez1.pokaz();
- ciez2.pokaz();
- cout << "##################### pokaz funkcje pokazujaca wszystkie samochody w tabelce" << endl;
- Samochod * tab[] = {new Osobowy(osob1), new Ciezarowy(ciez1), new Osobowy(osob2), new Ciezarowy(ciez2)};
- int tabSize = 4;
- pokazTab(tab,tabSize);
- cout << "##################### pokaz samochody dla danego wlasciciela" << endl;
- pokazMojeSamochody("kowalski", tab, tabSize);
- cout << "##################### kryterium" << endl;
- /*
- kryterium #1 najwieksza pojemnosc silnika
- kryterium #2 najmniejszy przebieg
- */
- pokazSamochodyWgKryterium("kowalski", tab, tabSize, 1);
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment