euMesmo2 0 Denunciar post Postado Setembro 11, 2009 Galera, meu codigo tem o seguinte contexto resumido: class jogador{ protected: char simbolo; public: void joga(char jogo[][3]){cout<<"Erro."<<endl;} }; class jogadorHumano: public jogador { public: jogadorHumano(char simb){simbolo=simb;} void joga(char jogo[][3]); }; void jogadorHumano::joga() { cout<<"Funcionou bem"<<endl; } class jogadorAI: public jogador { public: jogadorAI(char simb){simbolo=simb;} void joga(char jogo[][3]); }; void jogadorAI::joga() { cout<<"Funcionou bem"<<endl; } int main() { char entrada[10]; jogador* jogador1; jogador* jogador2; cout<<"Jogo da Velha:"<<endl; cout<<"Insira abaixo H ou AI para jogador humano ou artificial, respectivalente:"<<endl; cout<<"Jogador1:"; cin>>entrada; cout<<endl; do{ if(strcmp(entrada, "H")||strcmp(entrada, "h")) {jogador1=new (nothrow) jogadorHumano('X');} else if(strcmp(entrada, "AI")==0||strcmp(entrada, "ai")==0) {jogador1=new (nothrow) jogadorAI('X');} else { cout<<"Erro: entrada invalida. Entre apenas com \"AI\" ou\"H\":"<<endl; } }while(jogador1==0); jogador1->joga(); O problema e que ele, independente do que o usuário colocou("AI" ou "H") ta caindo na função jogador::joga() que imprime erro enquanto deveria cair em jogadorAI::joga() ou em jogadorHumano::joga().Por que? Como resolvo? Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Setembro 11, 2009 Desculpe se estou falando besteira, mas acho que a função da classe pai deveria ser virtual, já que você instanciou um objeto do tipo jogador, e não jogador humano... Quando você chama o método, ele vai no método da classe principal... Se esse método for virtual, fala pro programa procurar nas classes derivadas Compartilhar este post Link para o post Compartilhar em outros sites
euMesmo2 0 Denunciar post Postado Setembro 11, 2009 Desculpe se estou falando besteira, mas acho que a função da classe pai deveria ser virtual, já que você instanciou um objeto do tipo jogador, e não jogador humano... Quando você chama o método, ele vai no método da classe principal... Se esse método for virtual, fala pro programa procurar nas classes derivadas Como faço isso, digo, em codigo?! Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Setembro 12, 2009 Declare o método como "virtual" Não tem segredo! =D class Teste { public: pessoa(); virtual ~pessoa(); //o destrutor também deve ser virtual, para assegurar que seja chamado no momento correto. virtual void MetodoTeste(); //seu metodo virtual. }; class Deriv : public Teste { public: Deriv(); virtual ~Deriv(); void MetodoTeste(); }; Compartilhar este post Link para o post Compartilhar em outros sites
euMesmo2 0 Denunciar post Postado Setembro 12, 2009 Declare o método como "virtual" Não tem segredo! =D class Teste { public: pessoa(); virtual ~pessoa(); //o destrutor também deve ser virtual, para assegurar que seja chamado no momento correto. virtual void MetodoTeste(); //seu metodo virtual. }; class Deriv : public Teste { public: Deriv(); virtual ~Deriv(); void MetodoTeste(); }; Vlw, meu codigo ta na maquina do Ifet, mas vo tentar 2ª feira mesmo, mas pelo esboço q fiz deve dar certo, muito obrigado!!!T+ Compartilhar este post Link para o post Compartilhar em outros sites