#ifndef _EMP_H_
#define _EMP_H_

#include <cstring>
#include <iostream>
using namespace std;

const int SLEN = 20;

class employee
{
protected:
	char fname[SLEN];
	char lname[SLEN];
	char job[SLEN];
	virtual void ShowData(); 
	
public:
	employee();
	employee(char * fn, char * ln, char * j);
	employee(const employee & e );
	virtual ~employee(){ };
    virtual void ShowData() const {};
	virtual void ShowAll() const;
	virtual void SetAll();

	friend ostream& operator<<(ostream& os, const employee & e);

};


class manager: virtual public employee
{
protected:
	int inchargeof;
	
	void SetData();
	void ShowData() const override;

public:
	manager();
	manager(char * fn, char * ln, char * j, int ico = 0);
	manager(const employee & e, int ico);
	manager(const manager & m );
	void ShowAll() const;
	void SetAll();

};

class fink: virtual public employee
{
protected:
	char reportsto[SLEN];
	
	void SetData();
	void ShowData() const override;
public:
	fink();
	fink(char * fn, char * ln, char * j, char * rpo);
	fink(const employee & e, char * rpo );
	fink(const fink & f);
	
	void ShowAll() const;
	void SetAll();
	
};


class highfink: public manager, public fink
{
public:
	highfink();
	highfink(char * fn, char * ln, char * j, char * rpo, int ico);
	highfink(const employee & e, char * rpo, int ico);
	highfink(const fink & f, int ico);
	highfink(const manager & m, char* rpo);
	highfink(const highfink & h);

	void ShowAll() const;
	void SetAll();
	
private:
	void ShowData() const override {};
};

int main()
{
	return 0;
}

#endif