#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
class Osoba
{
public:
enum Pol
{
Muski = 0,
Zenski
};
Osoba(string ime="", string prezime="", Pol pol = Osoba::Muski)
: _ime(ime), _prezime(prezime), _pol(pol)
{}
string ime() const { return this->_ime; }
string prezime() const { return this->_prezime; }
Pol pol() const { return this->_pol; }
string polStr() const
{
if (this->_pol == Osoba::Muski) return "Muski";
return "Zenski";
}
ostream& pisi(ostream &out)
{
return out << "Ime :\n\t" << this->_ime << "\nPrezime :\n\t" << this->_prezime << "\nPol :\n\t" << this->polStr();
}
// Preklopljen operator za upisivanje u tok, nije trazeno ali je fino imati
friend ostream& operator<< (ostream &out,Osoba &o)
{
return o.pisi(out);
}
private:
Pol _pol;
string _ime,_prezime;
};
class Student : public Osoba
{
public:
Student(string ime="", string prezime="", Pol pol=Osoba::Muski,string brojIndexa="", int brojPolozenihIspita=0)
: Osoba(ime,prezime,pol), _brojIndexa(brojIndexa), _brojPolozenihIspita(brojPolozenihIspita)
{}
int brojPolozenihIspita() const { return this->_brojPolozenihIspita; }
string brojIndexa() const { return this->_brojIndexa; }
ostream& pisi(ostream &out)
{
this->Osoba::pisi(out);
return out << "Broj indeksa :\n\t" << this->brojIndexa() << "\nBroj polozenih ispita :\n\t" << this->brojPolozenihIspita();
}
friend ostream& operator<< (ostream &out,Student &s)
{
return s.pisi(out);
}
private:
int _brojPolozenihIspita;
string _brojIndexa;
};
class Profesor : public Osoba
{
public:
Profesor(string ime="", string prezime="", Pol pol=Osoba::Muski,string predmet="")
: Osoba(ime,prezime,pol), _predmet(predmet)
{}
string predmet() const { return this->_predmet; }
ostream& pisi(ostream &out)
{
this->Osoba::pisi(out);
return out << "Predmet :\n\t" << this->predmet();
}
friend ostream& operator<< (ostream &out, Profesor &p)
{
return p.pisi(out);
}
private:
string _predmet;
};
int main(){
Osoba o("nikola","ninkovic",Osoba::Muski);
cout << o;
Student s("pero","perovic",Student::Muski,"123",3);
cout << s;
Profesor p("neko","neki",Osoba::Zenski,"Srpski");
cout << p;
return 0;
}