Question

En ce qui concerne le programme C ++ suivant:

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 produit l'erreur suivante sur la dernière instruction d'affectation:

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

Ma question est en deux parties:

  1. Pourquoi est-il pas de conversion implicite de l'enfant ** à la base **?
  2. Je peux faire cet exemple travailler avec un casting de style C ou reinterpret_cast. L'utilisation de ces moulages signifie jeter toute sécurité de type. Est-ce que je peux ajouter aux définitions de classe pour faire ces pointeurs implicitement exprimés, ou au moins la phrase conversion d'une manière qui me permet d'utiliser à la place static_cast?
Était-ce utile?

La solution

Si cela était permis, vous pouvez écrire ceci:

*bb = new Base;

Et c finirait pointant vers une instance de Base. Bad.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top