Newsgroup: it.comp.lang.c++
Titolo: class object

Salve volevo chiedere se esiste una class object (equivalente a object i
java).
Del tipo posso dichiarare un oggetto di tipo object per poi fare
downcast (decido in fase di esecuzione che tipo di oggetto metterci
dentro).
Salve e grazie...
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 dentro).
La terminologia che usi suggerisce che tu stia cercando di applicare alla
programmazione in C++ le nozioni di Java che possiedi. In particolare, sembra
che tu non abbia chiara la distinzione tra 'oggetto' e 'puntatore/reference a
oggetto'. Solo in quest'ultimo caso ha senso parlare di 'downcast'.
Ricorrere al downcast è raramente la scelta più appropriata. Forse è il caso che
tu illustri meglio le tue esigenze.
Max

Ok... Grazie...
Risolvo il mio problema dichiarandomi una classe generica dalla quale
far ereditare le altre.


Attento al distruttore virtuale!
Mammamia! Letta cosě sembra una cosa uscita da un film di fantascienza!
Esempio:
class Base
{
public:
    ~Base() { }
};
class Deriv : public Base
{
    ~Deriv() { }
};
...
Deriv *ptrDer = new Deriv;
Base *ptr = ptrDer;
delete ptr;
Problema: il distruttore di Deriv non viene richiamato... Quindi gli oggetti
allocati da Deriv non vengono distrutti. Soluzione: dichiarare il
distruttore di Base come virtual:
virtual ~Base() { }

 virtual ~Base() { }
o protetto -.-
sbi

 dentro).
No, non esiste, dal momento che il C++ supporta l'ereditarieta'
multipla. Per altro l'uso di Object in Java e' spesso dovuto
all'assenza dei template, che sono un modo piu' efficace di
programmare in modo generico.
Non cercare di rifare in C++ le cose che facevi in Java, impara come
si fanno le cose in C++.
Ciao,
Nicola

 programmare in modo generico.
Eh... uh... Al 50% è vero... (ma poi tanto il Java non ha il boxing
automatico, vero?) Per il restante 50% l'Object probabilmente serve per
realizzare il polimorfismo, il dynamic_cast (probabilmente anche il typeid)
etc...
--- bye

 programmare in modo generico.
Pero' io noto che spesso le librerie C++ si definiscono la loro bella 
classe "Object" (es.: CObject per MFC), da cui derivano (quasi) tutte le 
altre classi (dico "quasi", dato che ho notato che ad esempio con MFC vi 
sono alcune classi come mi pare CString non derivate da CObject, ma sono 
una marcata minoranza).
Evidentemente avere una classe base comune puo' far molto comodo, 
indipendemente da template ed ereditarieta' multipla, o no?
Thnx per l'info
Ciao
Dan

...

Come dimostra il C++ la classe base totale globale non e'
indispensabile per implementare il polimorfismo ed i suoi ammenicoli
(downcast e RTTI). L'unico meccanismo che forse giustifica l'esistenza
di una classe base unica e' l'implementazione di un meccanismo di
serializzazione che permetta di creare oggetti di qualunque classe.
Anche per questo pero' si possono pensare soluzioni basate sulla
programmazione generica.
Ciao,
Nicola

 una marcata minoranza).
Sara' per questo che MFC e' comunemente considerata un esempio di come
non disegnare librerie C++?
Ciao,
Nicola

, 
Nicola....@ObjectWay.it says...

se non erro pero' accade anche in altre librerie c++...
(non so se anche nelle QT...)

 
anche nella libreria "root" del cern (!) mi pare:
http://root.cern.ch/

 realizzare il polimorfismo, il dynamic_cast (probabilmente anche il
typeid)
In che senso ?! La presenza del progenitore "Object" non è
indispensabile per realizzare il polimorfismo, nè il cast dinamico, nè
l'uso di RTTI.