Les transtypages en C++

1. LA FORME CANONIQUE DE COPLIEN
1.1 CONSTRUCTEUR PAR DÉFAUT
1.2 CONSTRUCTEUR DE RECOPIE
1.2.1 BUT DU CONSTRUCTEUR DE RECOPIES
1.2.2 PROTOTYPE DU CONSTRUCTEUR DE RECOPIE
1.2.3 QUAND EST IL NÉCESSAIRE DE CRÉER UN CONSTRUCTEUR DE RECOPIE?
1.4 OPÉRATEUR D’AFFECTATION
1.4.1 PROTOTYPE DE L’OPÉRATEUR D’AFFECTATION
1.4.2 DIFFICULTÉ SUPPLÉMENTAIRE PAR RAPPORT AU CONSTRUCTEUR PAR RECOPIE
1.5 EXERCICE RÉSOLU: UNE CLASSE CHAÎNE DE CARACTÈRES
1.5.1 STRUCTURE:
1.5.2 MISE EN ŒUVRE
1.5.3 CODE RÉSULTANT
1.6 EXERCICE RÉSOLU: DIFFÉRENCE ENTRE CONSTRUCTION ET AFFECTATION
1.7 LES CONSTRUCTEURS NE SUPPORTENT PAS LE POLYMORPHISME!11. DE LA SURCHARGE DES OPÉRATEURS ET DE LA BONNE UTILISATION DES RÉFÉRENCES EN GÉNÉRAL
2.1 BUTS
2.2 CHOISIR ENTRE MÉTHODE ET FONCTION
2.2.1 UN EXEMPLE PARTICULIER: LES OPÉRATEURS DE REDIRECTION
2.2.2 UNE RÈGLE BIEN UTILE
2.2.3 RÉCAPITULATIF
2.3 QUELS OPÉRATEURS NE PAS SURCHARGER?15.4 QUELS PARAMÈTRES DOIVENT PRENDRE LES OPÉRATEURS
2.4.1 PRÉFÉRER LES RÉFÉRENCES CONSTANTES AUX OBJETS
2.4.2 POURQUOI NE PAS TOUJOURS RENVOYER UNE RÉFÉRENCE
2.5 QUE DOIVENT RENVOYER LES OPÉRATEURS?19.6 LE CAS PARTICULIER DES OPÉRATEURS D’INCRÉMENTATION
2.7 LE CAS PARTICULIER DES OPÉRATEURS NEWET DELETE
2.7.1 BIEN COMPRENDRE LE FONCTIONNEMENT DE NEWET DELETE
2.7.2 UNE VERSION SPÉCIALE DE NEW: OPERATOR NEWDE PLACEMENT
2.7.3 EXERCICE: UN EXEMPLE SIMPLISTE DE SURCHARGE DE NEWET DELETE
3. LA GESTION DES EXCEPTIONS
3.1 SCHÉMA GÉNÉRAL D’INTERCEPTION DES EXCEPTIONS
3.2 LA LOGIQUE DE TRAITEMENT DES EXCEPTIONS
3.3 RELANCER UNE EXCEPTION
3.4 UTILISER SES PROPRES EXCEPTIONS
3.4.1 DÉCLARER SES EXCEPTIONS
3.4.2 UTILISER SES EXCEPTIONS
3.5 LES SPÉCIFICATEURS D’EXCEPTION
4. LES TRANSTYPAGES EN C++
4.1 NOUVELLE SYNTAXE DE L’OPÉRATEUR TRADITIONNEL
4.2 NOUVEAUX OPÉRATEURS DE TRANSTYPAGE
4.2.1 POURQUOI?
4.2.2 SYNTAXE
4.2.3 FONCTIONNALITÉS
4.3 LES CONVERSIONS IMPLICITES
4.3.1 LES OPÉRATEURS DE CONVERSION IMPLICITES
4.3.2 LES CONSTRUCTEURS AVEC UN SEUL PARAMÈTRE
5. EN GUISE DE CONCLUSION

1. La forme canonique de Coplien

La forme canonique, dite de Coplien, fournit un cadre de base à respecter pour les classes non triviales dont certains attributs sont alloués dynamiquement. Une classe Test dite sous forme canonique (ou forme normale ou forme standard) si elle présente les méthodes suivantes :
class T
{
public:
T (); // Constructeur par défaut
T (constT&); // Constructeur de recopie
~T (); // Destructeur éventuellement virtuel
T &operator=(const T&); // Operator d’affectation
};
1.1 Constructeur par défaut
Le constructeur par défaut est un constructeur sans argument ou dont chacun des arguments possède une valeur par défaut.
Il est utilisé, par exemple, lorsque l’on crée des tableaux d’objet. En effet, il n’est pas possible de passer un constructeur à l’opérateur new[]responsable de la création des tableaux.
En outre, de nombreuses bibliothèques commerciales ou non (Third Party Software), dont la bibliothèque standard du C++, nécessitent un constructeur par défaut pour la fabrication d’objets temporaires.
Si vous ne spécifiez aucun constructeur pour votre classe, alors le compilateur essaye de fournir un constructeur par défaut, qui, selon les environnements de développement, initialise à zéro chacun des membres de la classe ou les laisse vide. Au cas où votre classe agrégerait par valeur des objets, ceux-ci sont initialisés par leur constructeur par défaut s’il existe – autrement, le constructeur par défaut automatique ne peut pas être construit faute de moyen de construction des objets agrégés.
A partir du moment où vous spécifiez au moins un constructeur pour votre classe, le compilateur n’essaie plus de générer de constructeur par défaut automatique considérant que ceci est de votre ressort. De manière générale, il est très dangereux de ne pas fournir de constructeur pour une classe, sauf, peut-être, dans le cas de classes exception sans attribut.
1.2 Constructeur de recopie
1.2.1 But du constructeur de recopies
Comme son nom l’indique, le constructeur de recopie est spécialisé dans la créationd’un objet à partir d’un autre objet pris comme modèle. J’insiste sur le fait qu’il s’agit d’une création, donc à l’intérieur d’une déclaration d’objet. Toute autre duplication (au cours de la vie d’un objet) sera faite par l’opérateur d’affectation. Le constructeur de recopie a également deux autres utilisations spécifiées dans le langage :
 Lorsqu’un objet est passé en paramètre par valeur à une fonction ou une méthode, il y a appel du constructeur par recopie pour générer l’objet utilisé en interne dans celle-ci. Ceci garantit que l’objet original ne peut être modifié ! L’autre solution consiste à utiliser une référence constante.
 Au retour d’une fonction / méthode renvoyant un objet, il y a création d’un objet temporaire par le constructeur de recopie, lequel est placé sur la pile pour usage par le code appelant.
Ces deux fonctionnalités seront étudiées en détail dans les paragraphes concernant le type de retour des surcharges d’opérateurs.
1.2.2 Prototype du constructeur de recopie
La forme habituelle d’un constructeur de recopie est la suivante :
T::T(constT&)
Le paramètre est passé en référence, ce qui assure de bonnes performances et empêche un bouclage infini. En effet, si l’argument était passé par valeur, il devrait être construit par le constructeur de recopie. Hors c’est précisément ce dernier que nous bâtissons : il y aurait un appel récursif infini !
1.2.3 Quand est il nécessaire de créer un constructeur de recopie ?
Si nous ne spécifiez pas de constructeur par recopie, le compilateur en crée un automatiquement. Celui-ci est très simple : il recopie bit à bit, de manière « optimisée » l’objet source dans l’objet destination.
Ce comportement est absolument parfait pour les classes simples ne réalisant ni agrégation ni allocations dynamiques. Dans ce cas là, vous n’avez pas besoin de fournir un constructeur de recopie car vous ferez probablement moins bien que le compilateur lui même.
Dans tous les autres cas, vous aurez besoin de définir un constructeur de recopie :
Agrégation par valeur :il vous faudra recopier les objets agrégés par valeur, en appelant … leur constructeur par recopie !..

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Le C++ pour les pros (270 KO) (Cours PDF)
Cours c++

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *