Oppure

Loading
19/05/12 9:36
McFly
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?

class AbstractClass
{
   public:
   virtual void MetodoVirtualePuro() = 0;
   AbstractClass() { // non faccio niente }
   ~AbstractClass() { // non faccio niente }
}


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 19/05/12 9:37
aaa
19/05/12 10:44
nessuno
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à.
19/05/12 10:54
McFly
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).
aaa
20/05/12 12:46
lorenzo
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.
aaa