S'il a des méthodes virtuelles pures (et pas de données membres) alors, non, la synthèse de l'un est très bien (et ne pas faire n'importe quoi).
Si il ne ont les membres de données, alors vous devez définir votre propre constructeur de copie si/quand il est logique de le faire, tout comme pour toute autre classe. Les classes dérivées ne sont pas vraiment ont beaucoup à faire avec elle.
Si c'est un objet que vous prévoyez sur la copie, oui, c'est une bonne idée. Voir mon commentaire ci-dessous pour quand il ne l'est pas.
Si votre classe de base virtuelle s'appuie sur les ressources qui doivent être attribuée explicitement et copié (tampons, objets système d'exploitation, etc.), la définition d'un constructeur de copie vous permet d'économiser la peine de le faire dans chaque classe dérivée séparément (et, en outre, est quelque chose que vous ne pouvais pas le faire si ces ressources de base ont été privés, l'aide publique de l'héritage).
E. g.:
classBase{public:Base(constBase&);virtual~Base();virtualvoidMethod()=0;//etc...private:int*memberIntArray;int length;//etc...};classDerivedOne:publicBase{public:DerivedOne(constDerivedOne&);virtual~DerivedOne();virtualvoidMethod();//etc...protected://data, etc...};classDerivedTwo:publicBase{public:DerivedTwo(constDerivedTwo&);virtual~DerivedTwo();virtualvoidMethod();//etc...protected://data, etc...};///////////////////Base::Base(constBase& other ){this->length = other.length;this->memberIntArray =newint[length];
memcpy(this->memberIntArray,other.memberIntArray,length);}//etc...DerivedOne::DerivedOne(constDerivedOne& other ):Base( other ){//etc...}DerivedTwo::DerivedTwo(constDerivedTwo& other ):Base( other ){//etc...}
Je voudrais juste ajouter qu'un constructeur de copie doit être utilisé en faveur de l'annulation de l'opérateur=. Il améliore la lisibilité et est moins sujette aux erreurs. Honnêtement, je préfère déclarer privée copie vide les constructeurs et les opérateurs d'assignation à tout. De cette façon, si jamais j'ai essayer de copier quelque chose de façon inappropriée, le compilateur se plaint. Seulement si j'ai vraiment fait un copiable objet dois-je exposer tout ça. Vous pouvez rire en lisant cela, mais vous seriez surpris de voir comment de nombreux problèmes ont été résolus quand j'ai commencé cette pratique. 😉
Les règles de vos propres mises en œuvre pour le constructeur de copie, copie opérateur d'affectation et le destructeur d'une Classe s'appliquent à même une Classe Abstraite.
Cela dépend de votre utilisation, si vous n'êtes pas à faire tout ce qui requiert de la copie vers le manipuler délicatement, par exemple, la copie d'une poignée. Vous feriez mieux de définir un constructeur de copie dans les classes dérivées, si nécessaire.
comme les classes normales: oui, si vous avez un spécifique de mise en œuvre de besoin.
OriginalL'auteur justin
S'il a des méthodes virtuelles pures (et pas de données membres) alors, non, la synthèse de l'un est très bien (et ne pas faire n'importe quoi).
Si il ne ont les membres de données, alors vous devez définir votre propre constructeur de copie si/quand il est logique de le faire, tout comme pour toute autre classe. Les classes dérivées ne sont pas vraiment ont beaucoup à faire avec elle.
OriginalL'auteur Lightness Races in Orbit
Si c'est un objet que vous prévoyez sur la copie, oui, c'est une bonne idée. Voir mon commentaire ci-dessous pour quand il ne l'est pas.
Si votre classe de base virtuelle s'appuie sur les ressources qui doivent être attribuée explicitement et copié (tampons, objets système d'exploitation, etc.), la définition d'un constructeur de copie vous permet d'économiser la peine de le faire dans chaque classe dérivée séparément (et, en outre, est quelque chose que vous ne pouvais pas le faire si ces ressources de base ont été privés, l'aide publique de l'héritage).
E. g.:
Honnêtement, je préfère déclarer privée copie vide les constructeurs et les opérateurs d'assignation à tout. De cette façon, si jamais j'ai essayer de copier quelque chose de façon inappropriée, le compilateur se plaint. Seulement si j'ai vraiment fait un copiable objet dois-je exposer tout ça. Vous pouvez rire en lisant cela, mais vous seriez surpris de voir comment de nombreux problèmes ont été résolus quand j'ai commencé cette pratique. 😉
OriginalL'auteur Nate
Oui, vous devriez.
Les règles de vos propres mises en œuvre pour le constructeur de copie, copie opérateur d'affectation et le destructeur d'une Classe s'appliquent à même une Classe Abstraite.
Aussi, jetez un oeil à La règle de Trois
OriginalL'auteur Alok Save
Cela dépend de votre utilisation, si vous n'êtes pas à faire tout ce qui requiert de la copie vers le manipuler délicatement, par exemple, la copie d'une poignée. Vous feriez mieux de définir un constructeur de copie dans les classes dérivées, si nécessaire.
OriginalL'auteur user698391