2010-05-06 7 views
2

J'ai une question concernant le standard C++. Supposons que vous ayez une classe de base avec un constructeur de copie défini par l'utilisateur et un opérateur d'affectation. La classe dérivée utilise l'implicite générée par le compilateur.comportement du constructeur de copie implicite/opérateur d'affectation

La copie/l'affectation de la classe dérivée appelle-t-elle le constructeur de copie/l'opérateur d'affectation défini par l'utilisateur? Ou avez-vous besoin de mettre en œuvre des versions définies par l'utilisateur qui appellent la classe de base?

Nous vous remercions de votre aide.

Répondre

4

Si une classe dérivée ne déclare pas de constructeur de copie, une classe implicite sera déclarée (12.8/4 "Copying class objects") - même si la classe de base a un constructeur de copie défini et supprimé par l'utilisateur. Si la classe de base a un constructeur de copie défini par l'utilisateur dans ce cas, ce sous-objet de classe de base est copié à l'aide de cette copie définie par l'utilisateur ctor (12.8/8).

De même pour les opérateurs d'affectation de copie (12.8/10 et 12.8.13). Vous n'avez donc pas besoin d'implémenter des versions définies par l'utilisateur qui appellent la classe de base si la classe dérivée n'a pas besoin d'un opérateur de copie ou d'affectation de copie défini par l'utilisateur pour ses propres fonctions. Cependant, si la classe dérivée déclare et définit son propre opérateur de copie ctor/copy, ces implémentations définies par l'utilisateur sont chargées de faire ce qui est juste en ce qui concerne le sous-objet de la classe de base - cela n'est plus géré par le compilateur automatiquement.

+0

merci beaucoup. –

0

Seulement si la classe dérivée a une fonction opérateur explicitement définie. Sinon, la fonction op de la classe parent est appelée. Sinon, l'un C++ implicite est appelé.

Questions connexes