Maison >développement back-end >C++ >Pourquoi ne pouvons-nous pas implicitement convertir un pointeur à pointeur en classe de base en C ?
Conversion implicite de pointeur en pointeur entre les classes dérivées et de base
En C , le code suivant génère une erreur :
<code class="cpp">Child **cc = &c; Base **bb = cc;</code>
Le message d'erreur indique qu'il n'y a pas de conversion implicite de Child** vers Base**. Cependant, il est permis d'attribuer un pointeur enfant à un pointeur de base :
<code class="cpp">Child *c = new Child(); Base *b = c;</code>
Pour comprendre pourquoi cette différence existe, réfléchissez à ce qui se passerait si la conversion implicite était autorisée. On pourrait alors faire ce qui suit :
<code class="cpp">*bb = new Base;</code>
Cela aurait pour conséquence que c pointe vers une instance de Base, ce qui violerait le concept de classes dérivées et de base. Par conséquent, C interdit cette conversion implicite.
Pour permettre l'affectation entre Child** et Base**, on peut utiliser des casts de style C ou reinterpret_cast, mais ils sacrifient la sécurité des types. Il n'y a aucun moyen de réaliser cette conversion avec un cast implicite ou static_cast.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!