Ir ao conteúdo
  • Cadastre-se

C++ Metodos virtuais puro nao compila e virtual nao puro compila


KingSocial

Posts recomendados

 Boa noite galera, gostaria de saber a respeito do porque não consigo criar um vetor de classes com metodos virtuais pura e se eu colocar com virtual nao puro, vai legal.

Segue o trecho do codigo ai.

class Animal
{
private:
    std::string nome;
    int idade;
public:
    Animal(){nome=nullptr;idade=0;}
    Animal(std::string nome, int idade): nome(nome), idade(idade){};
    void setNome(std::string nome){this->nome=nome;}
    void setIdade(int idade){this->idade=idade;}
    std::string getNome(){return nome;}
    int getIdade(){return idade;}
    virtual std::string EmitirSom(){};
    virtual std::string ExecutarAcao(){};
};
Zoologico::Zoologico()
{
    animal= new Animal[10];
}

compila normal, porém se colocar puro.

class Animal
{
private:
    std::string nome;
    int idade;
public:
    Animal(){nome=nullptr;idade=0;}
    Animal(std::string nome, int idade): nome(nome), idade(idade){};
    void setNome(std::string nome){this->nome=nome;}
    void setIdade(int idade){this->idade=idade;}
    std::string getNome(){return nome;}
    int getIdade(){return idade;}
    virtual std::string EmitirSom()=0;
    virtual std::string ExecutarAcao()=0;
};

error: allocating an object of abstract class type 'Animal'

unimplemented pure virtual method 'EmitirSom' in 'Animal'

gostaria de entender o conceito do porque do erro.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Não programo em C++!

 

mas pelo o que eu entendi o compilador está avisando que você está tentando criar um objeto a partir de uma classe abstrata (que não tem os métodos definidos),

Classes abstratas definem o aspecto do objeto final, mas não tem instancias suficientes para criar o objeto.

 

Como eu disse acima, eu não programo em C++!

só estou dando pitaco, mas eu acho que se você definir o método EmitirSom vai compilar normalmente.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

35 minutos atrás, KingSocial disse:

error: allocating an object of abstract class type 'Animal'

unimplemented pure virtual method 'EmitirSom' in 'Animal'

 

É como está escrito. Somando o que está acima e o que está abaixo

 

	virtual std::string EmitirSom()=0;
	virtual std::string ExecutarAcao()=0;

 

uma classe abstrata é como um protótipo, uma base para criação de outras classes. Se você declara métodos como pure virtual então não faria sentido declarar instâncias dessa classe.

 

Como o compilador iria tratar Animal::EmitirSom() afinal?

 

No entanto 

struct Descendente : public Animal
{
public:
    virtual std::string EmitirSom() {};
    virtual std::string ExecutarAcao() {};
};

int main(void)
{
    Descendente todosAnimais[10];
    return 0;
};

Vai rodar sem problemas. E faz sentido.

  • Curtir 1
  • Obrigado 1
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...

Como se tornar um desenvolvedor full-stack

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!