Ir ao conteúdo
  • Cadastre-se

C++ Problema com Polimorfismo VS2015 c++


zidanebocao

Posts recomendados

Ola, estou tendo problemas com polimorfismo em um projeto que estou trabalhando.

O erro eh o seguinte, tenho uma classe Personagem, que uso como base para a classe Ferreiro.

A herança funciona perfeitamente, porém quando tento sobrescrever o metodo inicializar de Personagem em Ferreiro, nao consigo chamar o metodo sobrescrito, só o da classe base (espero que de pra entender)

Segue o codigo:

Personagem.h

#pragma once

#include <iostream>
 
using namespace std;
  
Class Personagem
{
  public:
  Personagem();
  ~Personagem();
  
  virtual void inicializar(int tipoPersonagem_, int x_, int y_);
  protected:
  int x, y, tipoPersonagem;
};

Personagem.cpp

#include "Personagem.h"
  
Personagem::Personagem()
{
}

Personagem::~Personagem()
{
}

void Personagem::inicializar(int tipoPersonagem_, int x_, int y_)
{
  x = x_;
  y = y_;
  tipoPersonagem = tipoPersonagem_;
}

Ferreiro.h

#pragma once
#include "Personagem.h"
  
class Ferreiro : public Personagem
{
 public:
  Ferreiro();
  ~Ferreiro();
  
  void inicializar(int x_, int y_);
private:
  int x, y;
};

Ferreiro.cpp

#include "Ferreiro.h"

Ferreiro::Ferreiro()
{
}

Ferreiro::~Ferreiro()
{
}

void Ferreiro::inicializar(int x_, int y_)
{
  x = x_;
  y = y_;
}

main.cpp

#pragma once
#include "Personagem.h"
#include "Ferreiro.h"
  
int main()
{
 Personagem *persoDinam;
  
  persoDinam = new Ferreiro;
  persoDinam->inicializar(300, 300); //aqui ele da erro, dizendo 'too few arguments in function call' pois tenta utilizar o de personagem
  
  return 0;
}

Estou utilizando visual studio 2015, simplifiquei o codigo apenas para as partes q dao erro. Por favor ajudem pois sigo exatamente os tutoriais que encontro e não funciona. Ja tentei colocar virtual na frente do void inicializar do ferreiro tambem (por desespero) e nada. Utilizo windows 8.1 e creio que nao é do meu computador isso.

Link para o comentário
Compartilhar em outros sites

você não está sobrescrevendo corretamente. É necessário que o método tenha a mesma quantidade de argumentos. O da classe base tem 3 argumentos, o da classe filho tem 2.

Se quiser manter do jeitos que está, uma solução, sem usar polimorfismo, seria:

static_cast<Ferreiro*>(persoDinam)->inicializar(300, 300); 

Outra coisa é que na classe Ferreiro você não precisa declarar novamente o x e o y, pois tais variáveis já existem na classe base.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!