Opérateur d'affectation virtuelle et ses nécessités en C
Bien que les opérateurs d'affectation puissent être définis comme virtuels en C , ce n'est pas une exigence obligatoire. Cependant, cette déclaration virtuelle soulève des questions sur le besoin de virtualité et sur la question de savoir si d'autres opérateurs peuvent également être rendus virtuels.
Les arguments en faveur de l'opérateur d'affectation virtuelle
L'opérateur d'affectation n’est pas intrinsèquement virtuel. Cependant, cela devient nécessaire lors de l'affectation d'objets de classes héritées à des variables de classe de base. Cette liaison dynamique garantit que l'implémentation correcte de l'opérateur d'affectation en fonction du type dynamique de l'objet est appelée.
Les autres opérateurs peuvent-ils être virtuels ?
Oui, autre les opérateurs qui prennent comme arguments un objet du type en cours de définition peuvent également être rendus virtuels. Cela permet la liaison d'exécution de ces opérateurs, garantissant que l'implémentation correcte est utilisée en fonction du type dynamique de l'objet.
Comportement inattendu avec l'opérateur d'affectation virtuelle
Création l'opérateur d'affectation virtuel peut conduire à un comportement inattendu. La signature d'une fonction virtuelle doit être identique pour tous ses remplacements. Par conséquent, il est important de garantir que les paramètres et les valeurs de retour des opérateurs d'affectation remplacés pour les différentes classes sont cohérents.
Valeurs par défaut et opérateurs d'affectation surchargés
Valeurs par défaut des paramètres Les opérateurs d'affectation peuvent être implémentés via des fonctions virtuelles. Cela permet d'utiliser les valeurs par défaut lorsqu'un objet d'une classe héritée est affecté à une variable du type de classe de base.
Runtime Type Information (RTTI)
RTTI peut être utilisé pour gérer efficacement les opérateurs d’affectation pour les types hérités. En utilisant Dynamic_cast pour déterminer le type de l'objet entrant, l'implémentation correcte de l'opérateur d'affectation peut être exécutée.
Exemple : attribution d'objets D à des objets B
Considérez ce qui suit code :
class B { public: virtual void operator=(const B& right) { ... } int x; }; class D : public B { public: virtual void operator=(const B& right) { ... } int y; };
Sans virtualité, l'attribution d'un objet D à un objet B appellerait l'opérateur d'affectation de la classe B, ce qui ne gérerait pas correctement les données membres supplémentaires de la classe D. Cependant, avec la virtualité, l'affectation correcte l'opérateur de la classe D est appelé.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3