Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Classe astratta
Forum - C/C++ - Classe astratta

Avatar
McFly (Normal User)
Newbie


Messaggi: 6
Iscritto: 06/01/2012

Segnala al moderatore
Postato alle 11:36
Sabato, 19/05/2012
Salve ragazzi,
ho un piccolo dubbio in merito alla corretta definizione di una classe astratta.

So che le classi astratte non sono istanziabili e rappresentano la maniera migliore per poter implementare unì'interfaccia ma mi chiedevo(forse dirò una stupidata) se all'interno esse debbano avere seppur senza implementazione: un costruttore e un distruttore, o concettualmente ma anche praticamente è sbagliato dato che non sono istanziabili?

Codice sorgente - presumibilmente C/C++

  1. class AbstractClass
  2. {
  3.    public:
  4.    virtual void MetodoVirtualePuro() = 0;
  5.    AbstractClass() { // non faccio niente }
  6.    ~AbstractClass() { // non faccio niente }
  7. }



Che ne pensate?

Sul mio libro di C++ c'è un esempio di classe astratta in cui sono presenti sia il costruttore che il distruttore.

Ultima modifica effettuata da McFly il 19/05/2012 alle 11:37
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:44
Sabato, 19/05/2012
Il costruttore e il distruttore possono esserci e possono essere utili quando la classe contiene degli attributi privati settabili dal costruttore della sottoclasse richiamando il costruttore della classe astratta.

Ma dipende da cosa vuoi fare esattamente perché se intendi usare quella classe proprio come "interfaccia" allora non devi aggiungere membri perché questa deve essere esclusivamente costituita da funzioni virtuali pure.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
McFly (Normal User)
Newbie


Messaggi: 6
Iscritto: 06/01/2012

Segnala al moderatore
Postato alle 12:54
Sabato, 19/05/2012
Ciao.. innanzitutto grazie per la tua risposta.

Si il mio scopo è quello di realizzare esclusivamente un'interfaccia, un contratto che tutte le classi derivate devono rispettare. Questa mia interfaccia ha solo due funzioni virtuale pure e non ha alcun membro.

Mi è sorto il dubbio perchè di solito è raccomandato aggiungere sia il costruttore che il distruttore esplicitamente anche se in realtà all'interno non vengono eseguite istruzioni (inizializzazioni degli attributi nel costruttore, e deallocazioni nel distruttore).

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:46
Domenica, 20/05/2012
Testo quotato


Mi è sorto il dubbio perchè di solito è raccomandato aggiungere sia il costruttore che il distruttore esplicitamente anche se in realtà all'interno non vengono eseguite istruzioni (inizializzazioni degli attributi nel costruttore, e deallocazioni nel distruttore).



Va bene, però ti sei mai chiesto il perché? Quando non espliciti il costruttore di default, il compilatore ne inserisce uno che effettua la copia byte per byte degli attributi della classe. Questo potrebbe anche andare bene, ma ci sono casi in cui il comportamento sarebbe dannoso(vedi i puntatori per esempio).
Quindi è sempre meglio esplicitare cosa si vuole fare nel costruttore.

Se però la tua classe non possiede attributi, allora non è necessario.

PM Quote