naofuieu 0 Denunciar post Postado Novembro 5, 2008 Galera, o seguinte: Eu estou fazendo um programa e me deparei com um dilema! Eu tenho uma classe Function abstrata e tenho uma classe Polynomial que herda de Function e implementa o método getDerivative de Function. O problema é que em Function, esse método retorna Function&. Então, tive que implementar em Polynomial retornando esse tipo também. Aí, começa meu martírio, pois o C++ não me deixa fazer um cast para Polynomial das variáveis retornadas pelo método de Polynomial!!! :blink: Alguém me dá uma luz??? :unsure: Eu preciso acessar métodos que estão somente em Polynomial (como pegar o grau do polinômio e talz), mas não deu certo. Já tentei fazer cast comum, static, dynamic, reinterpret e nenum deu certo! Valeu :wacko: Compartilhar este post Link para o post Compartilhar em outros sites
naofuieu 0 Denunciar post Postado Novembro 5, 2008 Tudo bem, fiz algumas modificações nas definições das classes e agora os métodos da classe Function devolve valores padrão quando chamados. O problema é: Eu tenho um Polynomial, sua derivada é um Polynomial, mas eu preciso recebê-lo em uma função como Function e calcular sua derivada. O problema é que o C++ não está pegando a derivada como um Polynomial!!! Ele até entra na chamada de derivada correta (a da classe Polynomial), mas é como se o tipo de retorno fosse um Function normal, pois quando chamo o método getResult() da derivada, o C++ chama o método em Function... Aqui estão as definições das classes: Function.hpp class Function { public: inline virtual ~Function() { }; inline virtual double getResult(double) { return 0.0; } inline virtual Function& getDerivative(void) { return *this; } inline double operator() (double v) { return getResult(v); } }; Polynomial.hpp class Polynomial : public Function { private: unsigned int degree; double *coefficients; public: Polynomial(unsigned int); Polynomial(unsigned int, double*) throw (int); ~Polynomial(); unsigned int getDegree(void); virtual Polynomial& getDerivative(void); double getCoefficient(unsigned int) throw (int); virtual double getResult(double); double getResultForPolynomial(double); double operator[] (unsigned int) throw (int); }; Percebam que o operador () está definido para chamar o método getResult. Isso realmente funciona no caso do polinômio, mas na derivada não! Socorro! Compartilhar este post Link para o post Compartilhar em outros sites