#include <iostream>
#include <string>
class pracownik
{
private:
std::string m_fullName;
std::string m_adres;
unsigned int m_nip;
public:
pracownik() {};
virtual ~pracownik() {} // musi być
//virtual void show(void);
friend std::ostream & operator<<(std::ostream & os, const pracownik & x);
};
class programista : virtual public pracownik
{
private:
std::string m_language;
public:
programista() : pracownik() {};
//virtual void show(void);
friend std::ostream & operator<<(std::ostream & os, const programista & x);
};
class piosenkarz : virtual public pracownik
{
private:
int voisceStrenght;
public:
piosenkarz() : pracownik() {};
//virtual void show(void);
friend std::ostream & operator<<(std::ostream & os, const piosenkarz & x);
};
std::ostream & operator<<(std::ostream & os, const pracownik & x)
{
os << "Imie i nazwisko: " << x.m_fullName << std::endl
<< "Adres: " << x.m_adres << std::endl
<< "NIP: " << x.m_nip << std:: endl;
return os;
}
std::ostream & operator<<(std::ostream & os, const programista & x)
{
os << (const pracownik &)x;
os << "Jezyk: " << x.m_language << std::endl;
return os;
}
std::ostream & operator<<(std::ostream & os, const piosenkarz & x)
{
os << (const pracownik &)x;
os << "Sila glosu: " << x.voisceStrenght << std::endl;
return os;
}
int main()
{
const piosenkarz p1;
std::cout<<p1<<std::endl;
const programista p2;
std::cout<<p2<<std::endl;
const pracownik *tb[]={&p1,&p2};
std::cout<<*(tb[0])<<std::endl;
std::cout<<*(tb[1])<<std::endl;
return 0;
};