Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

naofuieu

Alguém sugere alguma solução?

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.