O erro não pode instanciar a classe abstrata

O erro não pode instanciar a classe abstrata
Este artigo é sobre outro erro que geralmente ocorre quando estamos trabalhando com classes abstratas em nosso código. Vamos estudar o conceito de classes abstratas na programação orientada a objetos. Uma classe que não pode ter nenhum objetivo criado a partir de si é conhecido como uma classe abstrata. Também é chamado de interface na linguagem C ++. Qualquer classe pode ser abstrata na linguagem C ++, declarando uma função virtual pura. Para declarar uma função virtual, temos que colocar "= 0" após a função. A classe abstrata atua como pai ou classe base da qual todas as outras classes infantis são derivadas. Então, para acessar a classe abstrata, precisamos herdá -la de suas classes base. Quando tentamos instanciar uma classe abstrata, recebemos um erro de compilação.

Sintaxe

A mensagem de erro do nosso erro é a seguinte:

Erro: não pode declarar a variável "como do tipo abstrato"

Observe que, nos parênteses vazios, haverá nomes de classe variáveis ​​e abstratos.

Erro C2259: 'Estado': Não é possível instanciar a classe abstrata

Esta é outra mensagem que recebemos do compilador quando encontramos tal erro.

Exemplo # 01:

Para tornar esse erro compreensível, realizaremos um exemplo no qual escreveremos nosso código de tal maneira que recebemos um erro. Para esse fim, inicializamos uma aula com o nome "ShapeClass". Para tornar este resumo da classe, declaramos uma função virtual com o nome "getarea". Declaramos duas outras funções também com os nomes "Setwidth" e "sethight", respectivamente. O que queremos fazer aqui é que queremos obter altura como parâmetro e largura como um parâmetro de entrada. Estaremos calculando a área com a ajuda de nossos parâmetros de entrada. Criamos uma instância de nossa classe no método principal. Com a ajuda desse objeto, chamamos os métodos e passaremos os parâmetros de entrada através desses métodos. Depois disso, imprimimos nossa saída para verificar os resultados.

#incluir
usando namespace std;
Classe ShapeClass

público:
virtual int getarea () = 0;
Void SetWidth (int w)

largura = w;

Void Sethight (int h)

altura = h;

protegido:
int largura;
int altura;
;
int main (vazio)

Shapleclasssh;
sh.setWidth (1);
sh.SethEight (2);
cout<< "Total Rectangle area: " <retornar 0;

O sistema nos deu um erro após a execução do nosso código. A mensagem de erro diz que não podemos declarar variável 'sh' como do tipo abstrato 'shapeClass'. Agora, o compilador está tentando transmitir que 'shapeClass' é um tipo abstrato e não podemos declarar sua variável. Portanto, com a mensagem, podemos entender claramente que o compilador não está nos deixando instanciar nossa classe abstrata e é por isso que o sistema está nos dando o erro.

Para resolver o erro, declaramos outra classe 'retângulo'. Esta classe será a classe infantil de nossa classe abstrata e declararemos o corpo de nossa função virtual nesta classe. Depois disso, criaremos seu objeto no método principal e com a ajuda de seu objeto, chamaremos as funções.

Após as emendas, fizemos nosso código e agora conseguimos executar nosso código. O sistema executou nosso código sem dar erros. Podemos ver na saída que o sistema calculou a área de um retângulo e imprimiu a saída. Aprendemos que nosso erro foi que estávamos chamando diretamente o objeto de nossa classe abstrata, que era a abordagem errada. Quando chamamos o objeto de sua classe infantil, nosso código começou a funcionar bem.

Exemplo # 02:

Neste exemplo, não faremos nenhum cálculo matemático. Este exemplo é um exemplo genérico que nos ajudará a entender as classes abstratas e como o compilador é executado entre os métodos e as classes enquanto executa o código. Nesta classe, criamos uma classe abstrata e a chamamos de "Absclass". Declaramos outra classe “Classe Child”, mas esta não é uma classe abstrata. Esta classe é derivada de nossa classe abstrata.

Imprimimos “Valor passado usando objeto” em um método declarado na classe abstrata. O nome da função é "valuefunc". Como discutimos, o corpo da função virtual é declarado na classe infantil. Em nossa classe infantil, imprimimos “na função virtual” em nosso corpo de função virtual. Agora, passaremos um valor para a nossa função de valor e veremos se o valor alcançado está correto. Em nosso método principal, criamos uma instância de nossa classe abstrata e, com a ajuda da instância, chamaremos nossas funções virtuais e outras. Agora, vamos executar nosso código.

#incluir
usando namespace std;
Classe Absclass

público:
virtual int virtfunc () = 0;
Void ValueFunc (int w)

largura = w;
cout<<"Value passed using Object"<
protegido:
int largura;
;
Classe ChildClass:
Public Absclass

público:
int virtfunc ()
cout<<"In Virtual Function"<
;
int main (vazio)

CLASS CRIANÇAS CC;
cc.valuefunc (5);
cout<retornar 0;

Após a execução do nosso código, receberemos um erro. Este erro é basicamente que não podemos instanciar uma classe abstrata que estamos tentando fazer aqui em nosso método principal. Uma coisa a observar aqui é que a variável e o tipo abstrato em nossa mensagem foram alterados.

Agora, tentaremos remover nosso erro e executar nosso código. Para esse fim, criaremos o objeto de nossa classe infantil e faremos sua instância. Com a ajuda dessa instância, chamaremos o virtual e outro método em nossa classe abstrata. Também será observado se podemos acessar a função virtual usando a classe infantil ou não. Se tivermos sucesso em fazê -lo, podemos dizer que acessamos a classe abstrata usando sua classe derivada.

Após a execução do nosso código, o compilador não lançou nenhum erro desta vez. Em vez disso, o sistema compilou nosso código com sucesso e nos deu a saída. Agora, vamos dar uma olhada na saída. O sistema imprimiu “Valor passado usando objeto” e “5” contra ele. Porque passamos 5 usando nossa instância no método principal. Depois disso, ele imprimiu a linha que pedimos em nossa função virtual.

Conclusão

Neste guia, discutimos erros críticos que os programadores encontram ao codificar e praticar conceitos orientados a objetos. Esses tipos de erros geralmente ocorrem quando um programador está lidando com classes abstratas. Todo o artigo resume que classes abstratas não podem ser instantadas e não podemos fazer seus objetos chamam métodos nele. Também tentamos exemplos diferentes para criar erros e depois resolvemos os erros em nosso código.