Element& Reel::operator/(Element& e) { if(typeid(e) == typeid(Complexe)) { Complexe& ecast = dynamic_cast<Complexe &>(e); if(typeid(*ecast.getRe()) == typeid(Entier)) { Entier* ccast = dynamic_cast<Entier *>(ecast.getRe()); Reel* tmp = new Reel(this->getX() / (float)ccast->getX()); return *(new Complexe(tmp, ecast.getIm()->clone())); } else if(typeid(*ecast.getRe()) == typeid(Reel)) { Reel* rcast = dynamic_cast<Reel *>(ecast.getRe()); Reel* tmp = new Reel(this->getX() / rcast->getX()); return *(new Complexe(tmp, ecast.getIm()->clone())); } else if(typeid(*ecast.getRe()) == typeid(Rationnel)) { Rationnel* rcast = dynamic_cast<Rationnel *>(ecast.getRe()); Reel* tmp = new Reel(this->getX()/((float)rcast->getX()/(float)rcast->getY())); return *(new Complexe(tmp, ecast.getIm()->clone())); } } else if(typeid(e) == typeid(Entier)) { Entier& ecast = dynamic_cast<Entier &>(e); return *(new Reel(this->getX() / (float)ecast.getX())); } else if(typeid(e) == typeid(Expression)) { Expression& ecast = dynamic_cast<Expression &>(e); return *(new Expression(this->toQString() + ' ' + ecast.getX() + ' / ')); } else if(typeid(e) == typeid(Rationnel)) { Rationnel& rcast = dynamic_cast<Rationnel &>(e); return *(new Reel(this->getX()/((float)rcast.getX()/(float)rcast.getY()))); } else if(typeid(e) == typeid(Reel)) { Reel& rcast = dynamic_cast<Reel &>(e); return *(new Reel(this->getX() / rcast.getX())); } else{qDebug()<<"erreur";} }
Element& Reel::operator+(Element& e) { if(typeid(e) == typeid(Complexe)) //! Si l'element en argument est un complexe { Complexe& ecast = dynamic_cast<Complexe &>(e); if(typeid(*ecast.getRe()) == typeid(Entier*)) { Entier* ccast = dynamic_cast<Entier *>(ecast.getRe()); Reel* tmp = new Reel(ccast->getX()+ this->getXAsFloat()); return *(new Complexe(tmp, ecast.getIm()->clone())); } else if(typeid(*ecast.getRe()) == typeid(Reel)) { Reel* rcast = dynamic_cast<Reel *>(ecast.getRe()); Reel* tmp = new Reel(rcast->getX() + this->getX()); return *(new Complexe(tmp, ecast.getIm()->clone())); } else if(typeid(*ecast.getRe()) == typeid(Rationnel)) { Rationnel* rcast = dynamic_cast<Rationnel *>(ecast.getRe()); Reel* tmp = new Reel(((float)rcast->getX()/(float)rcast->getY()) + this->getX()); return *(new Complexe(tmp, ecast.getIm()->clone())); } } else if(typeid(e) == typeid(Entier)) { Entier& ecast = dynamic_cast<Entier &>(e); return *(new Reel((float)ecast.getX()+this->getX())); } else if(typeid(e) == typeid(Expression)) { Expression& ecast = dynamic_cast<Expression &>(e); return *(new Expression( this->toQString() + ' ' + ecast.getX() + ' + ')); } else if(typeid(e) == typeid(Rationnel))//! Si l'element en argument est un rationnel { Rationnel& rcast = dynamic_cast<Rationnel &>(e); return *(new Reel(((float)rcast.getX()/(float)rcast.getY())+this->getX())); } else if(typeid(e) == typeid(Reel)) //! Si l'element en argument est un reel { Reel& rcast = dynamic_cast<Reel &>(e); return *(new Reel(rcast.getX()+this->getX())); } }
Element& Entier::operator-(Element& e) { if(typeid(e) == typeid(Complexe)) { Complexe& ecast = dynamic_cast<Complexe &>(e); if(typeid(ecast.getRe()) == typeid(Entier*)) { Entier* ccast = dynamic_cast<Entier *>(ecast.getRe()); Entier* tmp = new Entier(this->getX() - ccast->getX()); return *(new Complexe(tmp, ecast.getIm()->clone())); } else if(typeid(ecast.getRe()) == typeid(Reel*)) { Reel* rcast = dynamic_cast<Reel *>(ecast.getRe()); Reel* tmp = new Reel((float) this->getX() - rcast->getX()); return *(new Complexe(tmp, ecast.getIm()->clone())); } else if(typeid(ecast.getRe()) == typeid(Rationnel*)) { Rationnel* rcast = dynamic_cast<Rationnel *>(ecast.getRe()); Rationnel* tmp = new Rationnel(this->getX()*rcast->getY() - rcast->getX(), rcast->getY()); return *(new Complexe(tmp, ecast.getIm()->clone())); } } else if(typeid(e) == typeid(Entier)) { Entier& ecast = dynamic_cast<Entier &>(e); return *(new Entier(this->getX() - ecast.getX())); } else if(typeid(e) == typeid(Expression)) { Expression& ecast = dynamic_cast<Expression &>(e); return *(new Expression( this->toQString() + ' ' + ecast.getX() + ' - ')); } else if(typeid(e) == typeid(Rationnel)) { Rationnel& rcast = dynamic_cast<Rationnel &>(e); return *(new Rationnel(this->getX()*rcast.getY() - rcast.getX(), rcast.getY())); } else if(typeid(e) == typeid(Reel)) { Reel& rcast = dynamic_cast<Reel &>(e); return *(new Reel((float)this->getX() - rcast.getX())); } }