Vídeo: Programação Orientada a Objetos (POO) // Dicionário do Programador 2024
Uma classe abstrata em C ++ é uma classe com uma ou mais funções virtuais puras. A função virtual pura é uma função de membro virtual marcada como sem implementação. Provavelmente não tem implementação porque nenhuma implementação é possível com a informação fornecida na classe, incluindo qualquer classe base.
Uma função virtual não-pura convencional, run-of-the-mill é conhecida como função de concreto (note que uma função concreta pode ser virtual - infelizmente, C ++ usa este termo para significar polimórfico.
A sintaxe para declarar uma função puramente virtual é demonstrada na seguinte classe Conta:
// Conta - esta classe é uma classe de classe abstrata Conta {público: Conta (não assinado accNo, double initialBalance = 0. 0); // acessar funções unsigned int accountNo (); double acntBalance (); static int noAccounts (); // operações de transação cancelar depósito (quantidade dupla); // o seguinte é uma pura função virtual retirada de vazio virtual (quantidade dupla) = 0; protegido: // mantenha contas em uma lista vinculada, portanto, não há limite // para o número de contas conta estática int; // número de contas conta assinadaNúmero; balanço duplo;};
O = 0 após a declaração de retirada () indica que o programador não pretende definir esta função. é um espaço reservado para as subclasses. As subclasses de Conta devem substituir esta função por uma função concreta. O programador deve fornecer uma implementação para cada função de membro não declarada pura virtual.
Alguns programadores pensam que esta notação é boba. Mas está aqui para ficar, então você só precisa aprender a viver com isso. Há uma razão, se não exatamente uma justificativa, para esta notação. Toda função virtual deve ter uma entrada em uma tabela especial.
Esta entrada contém o endereço da função. Presumivelmente, pelo menos ao mesmo tempo, a entrada para uma função virtual pura era 0. Em qualquer caso, é a sintaxe com a qual você está preso agora.
Uma classe abstrata não pode ser instanciada com um objeto; Ou seja, você não pode fazer um objeto fora de uma classe abstrata. Por exemplo, a seguinte declaração não é legal:
void fn () {// declara uma conta com 100 dolares Account acnt (1234, 100. 00); // isso não é legal. retirada (50); // o que você esperaria} // essa chamada para fazer?
Se a declaração fosse permitida, o objeto resultante seria incompleto, faltando em alguma capacidade. Por exemplo, o que a chamada anterior deve fazer? Lembre-se, não há conta:: retirada () .
As aulas abstratas servem como classes base para outras classes. Uma Conta contém todas as propriedades associadas a uma conta bancária genérica. Você pode criar outros tipos de contas bancárias ao herdar de Conta.
O termo técnico é instanciar . Você diz que a classe Conta não pode ser instanciada com um objeto ou um determinado objeto instancia a classe Economias .