Frage

Im Hinblick auf das folgende C ++ Programm:

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 erzeugt den folgenden Fehler auf der letzten Zuordnungsanweisung:

error: invalid conversion from ‘Child**’ to ‘Base**’

Meine Frage ist in zwei Teilen:

  1. Warum gibt es keine implizite Konvertierung von Child ** auf Basis **?
  2. kann ich dieses Beispiel funktioniert mit einem C-Casts oder reinterpret_cast. Mit Hilfe dieser Abgüsse Mittel alle Arten Sicherheit Wegwerfen. Gibt es etwas, was ich zu den Klassendefinitionen hinzuzufügen, kann diese Zeiger machen warf implizit oder zumindest Phrase die Umwandlung in eine Weise, die ich static_cast stattdessen verwenden kann?
War es hilfreich?

Lösung

Wenn dies erlaubt wurde, könnte man schreiben:

*bb = new Base;

Und c würde zu einer Instanz von Base zeigt am Ende. Bad.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top