Maison >développement back-end >C++ >Pourquoi ne pouvez-vous pas implicitement convertir un pointeur en pointeur d'une classe dérivée en pointeur en pointeur d'une classe de base ?
Conversion implicite de pointeur à pointeur entre les classes dérivées et de base
Lors du traitement des conversions de pointeur à pointeur entre les classes dérivées et de base classes, une erreur courante rencontrée est l'incapacité de convertir implicitement un pointeur en pointeur de la classe dérivée (Child) en un pointeur en pointeur de la classe de base (Base). En effet, une telle conversion peut conduire à des situations inattendues et potentiellement dangereuses.
Considérez l'exemple de programme fourni :
<code class="cpp">class Base { }; class Child : public Base { }; int main() { Child *c = new Child(); Base *b = c; Child **cc = &c; Base **bb = cc; // error: invalid conversion from ‘Child**’ to ‘Base**’ }</code>
L'erreur survient car le compilateur empêche l'affectation de cc (un enfant ) à bb (une Base). La raison sous-jacente de cette interdiction est de se prémunir contre d'éventuelles incohérences dans l'objet pointé par bb. Si une telle conversion était autorisée, cela pourrait conduire à un scénario dans lequel bb pointe vers une instance de Base qui n'est pas dérivée de Child.
Pour résoudre ce problème, il existe deux approches :
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!