Die Umwandlung von Zeigern-auf-Zeiger zwischen abgeleitet und Basisklassen?
-
22-09-2019 - |
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:
- Warum gibt es keine implizite Konvertierung von Child ** auf Basis **?
- 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 ichstatic_cast
stattdessen verwenden kann?
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