/*
 * Instituto Superior de Engenharia do Porto
 *
 * Estruturas de Informação
 *
 * 2000/2001
 *
 * ------------------------------------------
 *
 * Miniteste
 *
 */

#include <iostream>
using namespace std;
#include "../ei-include/erro.h"
#include "fraccao.h"


CFracao::CFracao(const CFracao& o)
{
	setDivisor(o.getDivisor());
	setDividendo(o.getDividendo());
}

CFracao::CFracao(int nDividendo /* = 0 */, int nDivisor /* = 1 */)
{
	setDivisor(nDivisor);
	setDividendo(nDividendo);
}

void CFracao::setDivisor(int nDivisor)
{
	if (nDivisor == 0)
		throw Erro(ERRO_GENERICO); 

	m_nDivisor = nDivisor;
}

CFracao& CFracao::operator=(const CFracao& o)
{
	setDivisor(o.getDivisor());
	setDividendo(o.getDividendo());
	return *this;
}

CFracao operator+(const CFracao& a, const CFracao& b)
{
	CFracao c;
	c.setDividendo(a.getDividendo()*b.getDivisor()+b.getDividendo()*a.getDivisor());
	c.setDivisor(a.getDivisor()*b.getDivisor());
	return c;
}

CFracao operator*(const CFracao& a, const CFracao& b)
{
	CFracao c;
	c.setDividendo(a.getDividendo()*b.getDividendo());
	c.setDivisor(a.getDivisor()*b.getDivisor());
	return c;
}

ostream& operator<<(ostream& output, const CFracao& obj)
{
	output << "(" << obj.getDividendo() << "/" << obj.getDivisor() << ")";
	return output;
}
