[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