Per quanto riguarda il seguente programma C++:Conversione del puntatore-puntatore tra classi derivate e di base?
class Base { };
class Child : public Base { };
int main()
{
// Normal: using child as base is allowed
Child *c = new Child();
Base *b = c;
// Double pointers: apparently can't use Child** as Base**
Child **cc = &c;
Base **bb = cc;
return 0;
}
GCC produce il seguente errore sull'ultima istruzione di assegnazione:
error: invalid conversion from ‘Child**’ to ‘Base**’
la mia domanda è in due parti:
- Perché non c'è conversione implicita da Child ** a Base **?
- Posso fare in modo che questo esempio funzioni con un cast in stile C o con
reinterpret_cast
. Usare questi calchi significa buttare via ogni tipo di sicurezza. C'è qualcosa che posso aggiungere alle definizioni di classe per far sì che questi puntatori vengano lanciati implicitamente, o per lo meno formulare la conversione in un modo che mi permetta di usare invecestatic_cast
?
Variazioni su questa domanda in molti linguaggi di programmazione è una delle domande più comuni su SO. Ma tutti lo descrivono in modo leggermente diverso anche per la stessa lingua, quindi trovare i duplicati può essere difficile. –
"Correggere" questo esempio per evitare dominazioni ombreggiate dipenderà dal motivo per cui si sta utilizzando un puntatore al puntatore in primo luogo. – aschepler