|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 38
|
[C++] Alternativa a "virtual static"?
Ciao,
dato che in C++ non si può definire un metodo statico come virtuale (e purtroppo neanche virtuale puro) mi chiedevo se qualcuno ne conosce una valida alternativa. Nello specifico ho una classe astratta con metodi virtuali puri; vorrei infatti che le sue classi derivate, che invece voglio poter istanziare, definiscano tali metodi obbligatoriamente!! In particolare ho previsto che tutte le classi derivate abbiano un metodo STATIC che restituisca la descrizione della classe derivata!! Ora, consapevole che il metodo static dichiara che il metodo è della classe, e non dell'istanza, quindi incompatibile con il polimorfismo e virtualità, mi chiedo: Perché non si può fare un metodo statico virtuale PURO nella classe astratta?? E, più importante, come ottenere una cosa simile? Cioè, come obbligare le classi derivate a dichiarare un metodo statico obbligatorio che restituisca la descrizione di tale classe derivata?? Grazie
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
In nessun linguaggio puoi definire un metodo virutale e statico. Se ci pensi non ha senso.
Perchè mai ti serve che sia statico? Potresti creare un unico costruttore della classe base che accetta una descrizione così da obbligare tutte le derivate ad impostare la descrizione a quel punto accessibile da un metodo uguale per tutte le classi (ma ovviamente non statico). |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Jul 2008
Messaggi: 38
|
Quote:
Per cui all'inizio del programma ho la necessità di avere delle informazioni su questa particolare classe derivata, di qui il bisogno di un metodo statico comune. Poi potresti anche chiedermi: ma perché fai una classe astratta se tanto puoi cambiare la classe in fase di compilazione? La risposta è semplice: per definire uno standard!! (O almeno è così che l'ho pensata... Non sono un programmatore di grande esperienza, anzi con C++ è la prima volta) Un'alternativa utile, che non utilizzi all'inizio del main Classe::metodo() che è statico e a mio avviso più elegante, è creare un metodo semplice virtuale puro che restituisca una stringa, istanziarlo nel main magari vuoto e poi chiamare quel metodo. Ma come anticipato mi sembrava più elegante il metodo statico. Tutto qui PS Però (al di là di dettagli implementativi della gestione dei puntatori ai metodi) secondo me sarebbe utili poter creare metodi statici virtuali ma PURI! Se è puro non ci sono molti problemi di polimorfismo, no? Ultima modifica di bobotti : 13-01-2011 alle 15:08. Motivo: PS |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Un metodo virtuale (puro o no non ha importanza) dipende dall'oggetto per decidere quale metodo chiamare. Ovviamente un metodo statico non vive nel contesto di un oggetto pertanto non può essere virtuale. Ma questo prescinde dal C++, è così anche in Java a C#. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:37.




















