#include using namespace std; class Restoran { private: char * ime; char * adresa; int godina_na_osnovanje; float dohod; float prodadeni_vafli; char odgovorno_lice[100]; public: Restoran() { ime = new char[100]; adresa = new char[100]; } Restoran(const char * _ime, const char * _adresa, int _godina_na_osnovanje, float _dohod, float _prodadeni_vafli, char * _odgovorno_lice) { ime = new char[(strlen(_ime))]; strcpy(ime, _ime); adresa = new char[strlen(_adresa)]; strcpy(adresa, _adresa); godina_na_osnovanje = _godina_na_osnovanje; dohod = _dohod; prodadeni_vafli = _prodadeni_vafli; strcpy(odgovorno_lice, _odgovorno_lice); } Restoran(const Restoran & tmp) { ime = new char[(strlen(tmp.ime))]; strcpy(ime, tmp.ime); adresa = new char[strlen(tmp.adresa)]; strcpy(adresa, tmp.adresa); godina_na_osnovanje = tmp.godina_na_osnovanje; dohod = tmp.dohod; prodadeni_vafli = tmp.prodadeni_vafli; strcpy(odgovorno_lice, tmp.odgovorno_lice); } Restoran & operator = (const Restoran & tmp) { ime = new char[(strlen(tmp.ime))]; strcpy(ime, tmp.ime); adresa = new char[strlen(tmp.adresa)]; strcpy(adresa, tmp.adresa); godina_na_osnovanje = tmp.godina_na_osnovanje; dohod = tmp.dohod; prodadeni_vafli = tmp.prodadeni_vafli; strcpy(odgovorno_lice, tmp.odgovorno_lice); return *this; } ~Restoran() { delete[] ime; delete [] adresa; } bool operator >= (Restoran tmp) { if(dohod >= tmp.dohod) { return true; } return false; } friend istream & operator >> (istream & stream, Restoran & tmp); virtual float presmetaj_dohod() { return dohod; } virtual void print() { cout << ime << " " << adresa << " " << godina_na_osnovanje << " " << dohod << " " << prodadeni_vafli << " "<< odgovorno_lice << endl; } }; class RestoranBezIsporaka : public Restoran { private: string najpopularna_vafla; string tip_na_zacini; float rejting; float zarabotka; public: RestoranBezIsporaka() : Restoran(){} RestoranBezIsporaka(char * _ime, char * _adresa, int _godina_na_osnovanje, float _dohod, float _prodadeni_vafli, char * _odgovorno_lice, string _najpopularna_vafla, string _tip_na_zacini, float _rating, float _zarabotka) : Restoran(_ime, _adresa, _godina_na_osnovanje, _dohod, _prodadeni_vafli, _odgovorno_lice){ najpopularna_vafla = _najpopularna_vafla; tip_na_zacini = _tip_na_zacini; rejting = _rating; zarabotka = _zarabotka; } RestoranBezIsporaka(const RestoranBezIsporaka & tmp) : Restoran(tmp) { najpopularna_vafla = tmp.najpopularna_vafla; tip_na_zacini = tmp.tip_na_zacini; rejting = tmp.rejting; zarabotka = tmp.zarabotka; } virtual float presmetaj_dohod() override { float osnoven_dohod = Restoran::presmetaj_dohod(); if(zarabotka >= 40000) { float result = osnoven_dohod + (0.15 * zarabotka); return result; } return osnoven_dohod; } virtual void print() override { Restoran::print(); cout << najpopularna_vafla << " " << tip_na_zacini << " " << rejting << " " << zarabotka << endl; } }; class RestoranSoIsoraka : public Restoran { private: string najklikana; string komentari; string webstrana; float rejting; public: RestoranSoIsoraka() : Restoran() { } RestoranSoIsoraka(char * _ime, char * _adresa, int _godina_na_osnovanje, float _dohod, float _prodadeni_vafli, char * _odgovorno_lice, string _najklikana, string _komentari, string _webstrana, float _rejting) : Restoran(_ime, _adresa, _godina_na_osnovanje, _dohod, _prodadeni_vafli, _odgovorno_lice){ najklikana = _najklikana; komentari = _komentari; webstrana = _webstrana; rejting = _rejting; } RestoranSoIsoraka(RestoranSoIsoraka & tmp) : Restoran(tmp) { najklikana = tmp.najklikana; komentari = tmp.komentari; webstrana = tmp.webstrana; rejting = tmp.rejting; } virtual float presmetaj_dohod() override{ float osnoven_dohod = Restoran::presmetaj_dohod(); if(rejting > 3) { return osnoven_dohod * rejting; } return osnoven_dohod; } virtual void print() override { Restoran::print(); cout << najklikana << " " << komentari << " " << webstrana << " "<< rejting << endl; } }; istream & operator >> (istream & stream, Restoran & tmp) { char _ime[100], _adresa[100]; stream >> _ime; stream >> _adresa; tmp.ime = new char[strlen(_ime)]; strcpy(tmp.ime, _ime); tmp.adresa = new char[strlen(_adresa)]; strcpy(tmp.adresa, _adresa); stream >> tmp.godina_na_osnovanje; stream >> tmp.dohod; stream >> tmp.prodadeni_vafli; stream >> tmp.odgovorno_lice; return stream; } void najgolem_dohod(int n, Restoran ** restorani) { float najgolem_dohod = 0.0; for(int i = 0; i < n; i++) { if(restorani[i]->presmetaj_dohod() > najgolem_dohod) { najgolem_dohod = restorani[i]->presmetaj_dohod(); } } for(int i =0; i < n; i++) { if(restorani[i]->presmetaj_dohod() == najgolem_dohod) { restorani[i]->print(); } } } int main() { Restoran * restorani[3]; restorani[0] = new RestoranSoIsoraka("gino", "centar", 1900, 500, 50, "lice", "krem", "dobri", "www.gino.mk", 4.5); restorani[1] = new RestoranBezIsporaka("abc", "karpos", 2000, 600, 50, "abc", "nutela", "seakkvi", 10.5, 20000); restorani[2] = new Restoran("rew", "aerodrom", 2025, 1000, 80, "rew"); najgolem_dohod(3, restorani); return 0; }