photo
+ Responder ao Tópico
Resultados de 1 a 1 de 1

Thread: Classes abstratas e funções meramente virtuais (puras)

  1. #1 Fechar a publicação
    Senior Member usuarioforum's Avatar usuarioforum's Avatar
    Data de afiliação
    Aug 2018
    Postagens
    579
    Obrigado
    166
    Agradecimentos 614 Tempos em 368 Postagens
    AssinarAssinar
    subscritar: 0

    Classes abstratas e funções meramente virtuais (puras)

    As classes abstratas estão projetadas para criar entidades generalizadas, cuja base, no futuro, prevê a criação de classes derivadas mais específicas. Uma classe abstrata é uma classe que pode ser utilizada apenas como classe base para alguma outra classe, por isso é impossível criar um objeto do tipo classe abstrata

    Uma classe, que contenha pelo menos uma função meramente virtual, é abstrata. Portanto, as classes derivadas da classe abstrata devem implementar todas as suas funções meramente virtuais, caso contrário, elas serão também classes abstratas.

    A função virtual é declarada como "pura" utilizando a sintaxe do especificador de pureza. Consideremos, como exemplo, uma classe CAnimal, criada apenas para fornecer funções comuns - são os próprios objetos do tipo CAnimal que têm um caráter demasiado geral para um uso prático. Assim, a classe CAnimal é uma boa candidata para classe abstrata:



    class CAnimal
    {
    public:
    CAnimal(); // construtor
    virtual void Sound() = 0; // função meramente virtual (pura)
    private:
    double m_legs_count; // número de patas do animal
    };


    Aqui a função Sound() é meramente virtual, porque é declarada com o especificador da função meramente virtual PURE (=0).

    São funções meramente virtuais apenas aquelas funções virtuais para as quais é exibido o especificador de pureza PURE, nomeadamente: (=NULL) ou (=0). Exemplo de declaração e utilização de uma classe abstrata:



    class CAnimal
    {
    public:
    virtual void Sound()=NULL; // PURE method, deve ser substituído no descendente, a própria classe CAnimal tornou-se abstrata e não pode ser criada
    };
    //--- descendente a partir da classe abstrata
    class CCat : public CAnimal
    {
    public:
    virtual void Sound() { Print("Myau"); } // PURE é substituída, classe CCat não é abstrata e pode ser criada
    };

    //--- exemplos de utilização incorreta
    new CAnimal; // erro 'CAnimal' - compilador выдаст ошибку "não é possível instanciar classe abstrata"
    CAnimal some_animal; // ошибка 'CAnimal' - компилятор выдаст ошибку "não é possível instanciar classe abstrata"

    //--- exemplos de utilização correta
    new CCat; // sem erros - a classe CCat não é abstrata
    CCat cat; // sem erros - a classe CCat não é abstrata

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  2. The Following User Says Thank You to usuarioforum For This Useful Post:

    Não registrado (1 )

+ Responder ao Tópico

Permissões de postagens

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts