CCCPaste

Untitled

#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;

}