[Tech] Rompicapo per programmatori C++
Gabriele Grilli
grilligab@tiscalinet.it
Dom 14 Apr 2002 22:49:09 CEST
Stefano wrote:
> Sto facendo un programma in C++ ed ho un problema che non riesco
> a risolvere.
> Devo definire un puntatore al costruttore di una classe ma non
> so come fare:
> Prendiamo il seg. esempio:
>
> ci sono tre classi cosi definite:
>
> class C1
> {
> int i;
>
> C1() : i(0) {}
> }
>
> class C2
> {
> char j;
>
> C2() : j(0) {}
> }
>
> class C3
> {
> char *s;
>
> C3() : s(NULL) {}
> }
>
> <puntatore costruttore> pCostruttore;
>
> voglio definire la seguente funzione che mette in pCostruttore
> il costruttore del numero della classe passata come argomento
>
> void funz(int classe)
> {
> if (classe = 1)
> pCostruttore = C1::C1;
> else if (classe = 2)
> pCostruttore = C2::C2:
> else
> pCostruttore = C3::C3;
> }
>
> che cosa devo mettere in <puntatore costruttore> ??
>
pCostruttore di che tipo e' ?
potresti utilizzare la seguente:
pCostruttore = (<tipo pCostruttore>)new C1();
il problema e' che poi perdi il tipo dell'oggetto e quindi NON puoi
usare metodi virtuali.
Puoi far si che C1, C2, C3 vengano derivate dalla stessa classe (CBase
per esempio) e che pCostruttore sia del tipo base
"CBase *". In questo modo puoi usare i metodi virtuali di C1, C2 e C3
che sono anche definiti in CBase.
Un'altra soluzione e' usare i template per definire funz.
Infine vorrei sapere chi DEVE usare pCostruttore, se dentro funz o
fuori, in questo modo ti posso essere piu' di aiuto.
Ciao
Gabriele
Maggiori informazioni sulla lista
flug-tech