Domanda

Per quanto riguarda il programma seguente C ++:

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:

  1. Perché non c'è conversione implicita da bambino ** ** di basare?
  2. posso fare questo esempio lavoro con un cast C-style o un reinterpret_cast. L'utilizzo di questi calchi significa buttare via tutta sicurezza tipo. C'è qualcosa che posso aggiungere alle definizioni di classe per rendere questi puntatori espressi in modo implicito, o almeno frase la conversione in un modo che mi permette di usare static_cast invece?
È stato utile?

Soluzione

Se questo è stato permesso, si potrebbe scrivere questo:

*bb = new Base;

E c finirebbe che punta a un'istanza di Base. Bad.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top