Ir ao conteúdo

Posts recomendados

Postado

 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
Postado
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.

  • Obrigado 1

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!