Ir para conteúdo

POWERED BY:

Arquivado

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

euMesmo2

[Resolvido] Problemas com polimorfismo

Recommended Posts

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

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

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

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

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

×

Informação importante

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