Element* Calculateur::cast(Element* e) { if(typeid(*e) == typeid(Expression)) { qDebug()<<"cast expression"; return e->clone(); } else if(isComplexe())//\todo ici il faudrait faire attention de ne pas transformer les parties imaginaire et réelle d'un complexe en complexe { qDebug()<<"cast Complexe"; return e->toComplexe(); } else if(isEntier()) { qDebug()<<"cast entier"; return e->toEntier(); } else if(isReel()) { qDebug()<<"cast reel"; return e->toReel(); } else if(isRationnel()) { qDebug()<<"cast rationnel"; return e->toRationnel(); } else { qDebug()<<"cast else"; return e->toReel(); } }
void Pile::cast(Constante* & cst){ // if(typeid(*cst) ==typeid(CEntier) && !isEntier()){ // CEntier * tmp =(CEntier*) cst; // if(isRationnel()){ // cst = new CRationnel(tmp->getValue(), 1); // }else { // cst = new CReel(tmp->getValue()); // } // delete tmp; // } if(typeid(*cst) ==typeid(CRationnel) && !isRationnel()){ CRationnel * tmp = (CRationnel*) cst; if(isEntier()){ cst = new CEntier((float)tmp->getNum()/(float)tmp->getDenom()); }else { cst = new CReel((float)tmp->getNum()/(float)tmp->getDenom()); } delete tmp; } else if(typeid(*cst) ==typeid(CReel) && !(isReel())) { CReel * tmp = (CReel*) cst; if(isEntier()){ cst = new CEntier(tmp->getValue()); }else { cst = new CRationnel(tmp->getValue()); } delete tmp; } }
bool Calculatrice::isConstante(const QString& s) const{ if (isEntier(s) || isReel(s) || isRationnel(s) || isComplexe(s)) { return true; } return false; }