J'ai le code comme ceci:C++ Comment se fait-il que je ne puisse pas assigner une classe de base à une classe enfant?
class Base
{
public:
void operator = (const Base& base_)
{
}
};
class Child : public Base
{
public:
};
void func()
{
const Base base;
Child child;
child = base;
}
Ma question est la suivante: depuis l'enfance dérive de la base (d'où il devrait hériter de l'opérateur de base =), comment se fait lorsque la déclaration
child = base;
est exécuté, je obtenir une erreur de compilation comme ceci:
>.\main.cpp(78) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const Base' (or there is no acceptable conversion)
1> .\main.cpp(69): could be 'Child &Child::operator =(const Child &)'
1> while trying to match the argument list '(Child, const Base)'
le comportement que je veux est pour la classe de l'enfant à reconnaître qu'il est affecté d'être une classe de base, et juste appelle "automatiquement" l'opérateur de son parent =.
Une fois que j'ajouté ce code à la classe des enfants
void operator = (const Base& base_)
{
Base::operator=(base_);
}
puis de tout compilé bien. Bien que je ne pense pas que ce serait bon parce que si j'ai comme 5 classes différentes qui héritent de la base, alors je dois répéter le même code dans chaque classe dérivée.
NOTE: Mon intention de copier le Base
-Child
est de copier simplement les membres qui sont communs aux deux Base
et Child
(ce qui serait tous les membres de Base
). Même après avoir lu toutes les réponses ci-dessous, je ne vois vraiment pas pourquoi C++ ne le permet pas, surtout s'il y a un operator=
explicite défini dans la classe Base
.
Vous semblez manquer les bases du polymorphisme. –
Un chat est un animal mais un animal n'est pas nécessairement un chat. – jason
Mon intention était simplement de copier les membres qui sont communs entre les classes Base et Enfant. – sivabudh