J'ai rencontré le problème suivant qui m'a prouvé que j'en connais trop peu sur le fonctionnement de C++.Les opérateurs d'affectation ne sont-ils pas surchargés lorsqu'ils sont appelés sur des pointeurs d'une classe de base?
-je utiliser une classe de base avec des fonctions virtuelles pures
class Base
...
et une classes dérivées de type
class Derived : public Base{
private:
Foo* f1;
...
ont tous deux opérateurs d'affectation mis en œuvre. Entre autres choses, l'opérateur d'affectation de Derived copie les données dans f1. Dans mon code, je crée deux nouvelles instances de classe dérivée
Base* d1 = new Derived();
Base* d2 = new Derived();
Si je l'appelle maintenant l'opérateur d'affectation
*d1 = *d2;
l'opérateur d'affectation des dérivées n'est pas appelée, et les données f1 ne sont pas copiées ! Cela ne fonctionne que si je le fais
*dynamic_cast<Derived*>(d1) = *dynamic_cast<Derived*>(d2);
Quelqu'un peut-il expliquer pourquoi les opérateurs d'affectation ne sont pas surchargés?
Merci!
Vous n'avez pas de classe de base virtuelle; si 'Base' était une classe de base virtuelle,' Derived' serait déclaré comme 'classe Derived: public virtual Base'. Votre classe de base peut avoir des fonctions virtuelles. –
Je pense que vous surchargez et surchargez. – fredoverflow