Tengo una clase ecuacion madre, y otras hijas que serian ecuacion lineal, ecuacion cuadratica, etc...
Lo que ocupo es calcular la imagen de "x" numero...
Eemplo: en f(x)=3x^2+3x+4, si x numero es 3 entonces f(3)=3*3^2+3x3+4...
El asunto es que ocupo el mismo metodo para todas las clases pero ocupo saber que tipo de ecuacion es para poder hacer el calculo...
Lo que hice para saber que ecuacion es fue esto:
Código:
Asi me devuelve un string diciendo por ejemplo "class EcuacionCuadratica"//Esto en la clase madre virtual string queSoy()const=0{} //Esto en las clase hija: virtual string queSoy()const{ return typeid(*this).name(); }
Pero el problema comienza aqui, este seria el metodo:
Código:
En la todas puedo llamar a getA y getB ya que es de la clase madre...class Calculadora{ double calculaImagen(double x, Ecuacion *e){ if(e->queSoy()=="class EcuacionLineal"){ return e->getA()*x+e->getB(); } if(e->queSoy()=="class EcuacionCuadratica"){ return e->getA()*(x*x)+e->getB()*x+e->getC();} } };
Pero al realizar el calculo de cuadratica no puedo llamar a getC que seria un atributo de la clase EcuacionCuadratica (clase hija)
Asi es la clase madre:
Código:
La clase Cuadratica:#include<string> using namespace std; class Ecuacion { protected: float a; float b; public: Ecuacion(void) { a = 0; b=0; } Ecuacion(float a1, float b1){ a = a1; b = b1; } ~Ecuacion(void){} void setA(float X1){ a = X1;} float getA(){return a;} void setB(float iy){ b = iy;} float getB(){return b;} virtual string queSoy()const=0{} };
Código:
#include"Ecuacion.h" class EcuacionCuadratica: public Ecuacion { private: float c; public: EcuacionCuadratica(float X2,float x,float x1):Ecuacion(x,x1){ c=X2; } ~EcuacionCuadratica(void){ } float getC(){ return c; } void setC(float abc){ c=abc; } virtual string queSoy()const{ return typeid(*this).name(); } };