Est-il possible de faire en sorte que le compilateur crée les constructeurs par défaut même si je fournis un constructeur explicite? Parfois, je les trouve très utiles, et je trouve que c'est une perte de temps pour écrire, par exemple. le constructeur de copie, en particulier pour les grandes classes.Comment puis-je faire en sorte que le compilateur crée les constructeurs par défaut en C++?
Répondre
Le constructeur de copie est fourni si vous définissez d'autres constructeurs ou non. Tant que vous ne déclarez pas de constructeur de copie, vous en obtenez un.
Le constructeur sans argument n'est fourni que si vous ne déclarez pas de constructeur. Vous n'avez donc pas de problème à moins de vouloir un constructeur sans argument, mais considérez que c'est une perte de temps d'en écrire un.
IIRC, C++ 0x a un moyen de déléguer la construction à un autre constructeur. Je ne peux pas me souvenir des détails, mais cela vous permettrait de définir un constructeur sans arg en spécifiant un autre constructeur, plus le ou les arguments à lui passer. Peut-être sauver la saisie de certains initialiseurs de membre de données dans certains cas. Mais le constructeur par défaut sans arg n'a pas non plus fourni ces initialiseurs.
Vous ne pouvez pas - le compilateur désactive une partie de son constructeur par défaut généré automatiquement lorsque vous fournissez le vôtre, de sorte que vous pouvez empêcher la construction par défaut de certaines classes de cette façon. Cependant, je pense que C++ 0x vous permettra d'indiquer explicitement une implémentation du compilateur par défaut, par exemple:
MyClass() = default; // 'delete' also allowed by upcoming standard to disable
Je ne pense pas que les compilateurs soutiennent ce encore - C++ 0x (comme la norme suivante a été connu) n'est pas encore définitif, donc vous devrez juste faire dactylographier vos constructeurs par défaut pour l'instant. Ce n'est pas beaucoup de code! MyClass() {}
fera aussi longtemps que tous les membres sont eux-mêmes constructibles par défaut.
Pourriez-vous ajouter des références? – qdii
Le compilateur génère toujours le constructeur de copie par défaut, sauf si vous fournissez votre propre définition de constructeur de copie. Votre problème est uniquement avec le constructeur par défaut sans argument, qui n'est pas généré s'il existe une définition de constructeur. Mais ce n'est pas si difficile de fournir sans arg constructeur qui se comporte exactement comme un produit:
class yourClass
{
public:
yourClass(){}
}
Je pense que vous voulez mettre public: au-dessus du constructeur au lieu de comme un mot-clé de style Java/C#. – AshleysBrain
Je parlais plutôt du constructeur de copie ... qui est un peu plus de code si vous avez beaucoup de propriétés. –
@AshleyBrain @Itay Moav: merci. Je travaille en Java maintenant donc mes habitudes changent :-) –
- 1. Comment faire en sorte que PHPMyAdmin affiche les avertissements MySQL?
- 2. HttpHandler conditionnel: comment faire en sorte que certaines requêtes retournent la réponse par défaut?
- 3. Que fait par défaut (objet); faire en C#?
- 4. forcer plusieurs processus et faire en sorte que le parent les attende tous (en C)
- 5. un compilateur généré constructeur par défaut en C++
- 6. Faire un double-défaut par défaut dans g77, compilateur Fortran
- 7. compilateur généré constructeurs
- 8. Comment faire en sorte que mon application affiche le graphique de glissement utilisé par la source?
- 9. Comment faire en sorte que NSOutlineView indente plusieurs colonnes?
- 10. Visual C++ options par défaut du compilateur
- 11. Constructeurs par défaut et paramétrés
- 12. Comment utiliser les constructeurs non-par défaut avec Ninject?
- 13. Comment le compilateur JIT décide quand initialiser les constructeurs statiques
- 14. Placement de nouveaux constructeurs et de constructeurs par défaut
- 15. Comment faire en sorte que WebDev nettoie ses pistes d'outils?
- 16. Faire en sorte que les fils fonctionnent correctement
- 17. Ordre d'initialisation avec les constructeurs en C++
- 18. Comment faire en sorte que QTableWidget affiche des éléments?
- 19. Drupal 6: Comment faire en sorte que certains nœuds ne soient visibles que par certains utilisateurs?
- 20. Comment faire en sorte que NHibernate fasse une jointure?
- 21. Comment faire en sorte que Worker() fonctionne avec plusieurs domaines?
- 22. Comment puis-je faire en sorte que le journal de compilation crée une nouvelle fenêtre dans Emacs?
- 23. Comment faire pour définir et déclarer une variable en utilisant le constructeur par défaut en C++?
- 24. Comment faire en sorte que l'URL envoie un formulaire d'action?
- 25. Surcharge les constructeurs en Java
- 26. Transférer tous les constructeurs en C++ 0x
- 27. Comment faire en sorte que OS X définisse l'emplacement initial de NSWindow
- 28. Comment faire en sorte que mon application ASP.NET serve uniquement les pages via HTTPS?
- 29. Comment faire en C# écrire le format de numéro anglais (non-localisé) par défaut?
- 30. Comment invoquer le compilateur C++ par programme?
Je ne comprends pas la question. cette classe triviale 'class MyClass {public: int i;};' a un ctor par défaut, copy ctor et dtor. –
@Binary Worrier: "même si je fournis moi-même un constructeur explicite". Si vous avez donné à 'MyClass' un constructeur' int', il n'aura plus de constructeur par défaut sans argument. –
Ceci est vrai, j'ai été loin de C++ pour * loin * trop longtemps. Excuses. –