Implizite Konvertierung von Zeiger-zu-Zeiger zwischen abgeleiteten und Basisklassen
In C löst der folgende Code einen Fehler aus:
<code class="cpp">Child **cc = &c; Base **bb = cc;</code>
Die Fehlermeldung weist darauf hin, dass keine implizite Konvertierung von Child** zu Base** erfolgt. Es ist jedoch zulässig, einem Basiszeiger einen untergeordneten Zeiger zuzuweisen:
<code class="cpp">Child *c = new Child(); Base *b = c;</code>
Um zu verstehen, warum dieser Unterschied besteht, überlegen Sie, was passieren würde, wenn die implizite Konvertierung zulässig wäre. Man könnte dann Folgendes tun:
<code class="cpp">*bb = new Base;</code>
Dies würde dazu führen, dass c auf eine Instanz von Base zeigt, was das Konzept abgeleiteter und Basisklassen verletzen würde. Daher verbietet C diese implizite Konvertierung.
Um die Zuweisung zwischen Child** und Base** zu ermöglichen, kann man Casts im C-Stil oder reinterpret_cast verwenden, aber sie opfern die Typsicherheit. Es gibt keine Möglichkeit, diese Konvertierung mit einer impliziten Umwandlung oder einem static_cast zu erreichen.
Das obige ist der detaillierte Inhalt vonWarum können wir einen Zeiger-zu-Zeiger nicht implizit in eine Basisklasse in C konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!