#ifndef POLINOM_H_INCLUDED
#define POLINOM_H_INCLUDED

					// POLINOM OSZTÁLYA
class Polinom
{
private:
// REPREZENTÁCIÓ
	// MONOMOK (POLINOM RÉSZEGYSÉGE) LESZNEK A LISTA ELEMEI
	struct Monom
	{
		int egyutthato; // EGYÜTTHATÓJA
		int kitevo; // KITEVŐJE
		
		// KONSTRUKTOROK
		Monom(){ }
		Monom(int determination, int exponent): egyutthato(determination), kitevo(exponent) { }
	};
	// LÁNCOLT LISTA ADATSZERKEZET MONOMOKRA
	struct Lista
	{
		Monom monom;
		Lista *next;
		
		// KONSTRUKTOR
		Lista(Monom m, Lista *mut = NULL): monom(m), next(mut) { }
	};
	
	Lista *polinom; // EGYIRÁNYÚ, NEM FEJELEMES, NEM CIKLIKUS, KITEVŐ SZERINT RENDEZETT LÁNCOLT LISTA
	// (A LEGKISEBB KITEVŐJŰ MONOMRA MUTAT)
	
	int Szam(std::string) const; // EGY BEKÉRT SZÁM VISSZAADÁSA
	void Hozzaad(Monom); // HOZZÁAD EGY MONOMOT A POLINOMHOZ (~ BESZÚR EGY ELEMET A LISTÁBA)
public:
	Polinom(); // KONSTRUKTOR
	~Polinom(); // DESTRUKTOR
	
	Polinom(const Polinom &); // COPY KONSTRUKOR
	Polinom& operator =(const Polinom &); // ÉRTÉKADÓ OPERÁTOR
	
	// KIVÉTELEK:
	//	1. NEM LEHET LEFOGLALNI MEMÓRIÁT EGY ÚJABB ELEMNEK
	enum Kivetelek{nincsMemoria};
	
	// KIÍRÓ ÉS BEOLVASÓ OPERÁTOROK
	friend std::istream& operator >>(std::istream &, Polinom &);
	friend std::ostream& operator <<(std::ostream &, const Polinom &);
	
	// ÖSSZEADÁS ÉS SZORZÁS OPERÁTOROK
	friend Polinom operator +(const Polinom &, const Polinom &);
	friend Polinom operator *(const Polinom &, const Polinom &);
};

#endif /*POLINOM_H*/
