Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

C++ : Création d'une bibliothèque de chaînes de caractères

Découvrir les constructeurs

Testez gratuitement nos 1341 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
À partir d'une version embryonnaire, posez les bases de la classe avec la création de ses constructeurs et l'utilisation de pointeurs intelligents.

Transcription

Première étape dans l’écriture de la classe chaine, l’écriture des constructeurs et destructeurs de la classe. Quand on a une classe chaine ici qui ne contient que les constructeurs et deux accesseurs taille pour accéder à la taille et val qui permet de consulter ce que contient la chaine, on a grâce à ça pu écrire des tests avant d’écrire le contenu des méthodes. Ces tests ici sont donc le test du constructeur par défaut. Alors, vous remarquez ici qu’il n’y a pas d’accent. Tout ce qui est test et log n’a pas d’accent pour que sous windows, on n’ait pas de problème d’affichage. Les caractères accentués s’affichant mal en mode console. Sur notre test ici, la création d’une classe et d’une instance de la classe chaine a par défaut et donc une taille zéro et une chaine vide. Un test de la construction par valeur où là on spécifie bonjour qui fait 7 caractères si tout se passe bien. Et notre valeur retournera bonjour pour a. Un test de construction par copie. Donc on créé a, et puis on revérifie après avoir copié a dans b que les deux chaines ont la même taille et contiennent la même chose. Une construction enfin par déplacement, où on crée une chaine a qui contient bonjour. On la déplace avec la méthode standard move dans b. Et donc a ne contient plus rien. Donc taille nulle et strcmp, donc une comparaison de la chaine qui est une chaine vide pour a. Et puis pour b qui contient maintenant l’ancienne valeur de a. Donc bonjour et une taille de 7. Enfin on teste si la mémoire est intacte, s’il ne reste plus rien en mémoire il n’y a pas de fuite de mémoire à la fin de notre test. Et donc on teste si mémoire, que l’on a vu précédemment retourne bien zéro. Donc nos tests sont écrits. Il ne nous reste plus qu’à écrire le contenu de notre chaine. Alors pour écrire le contenu on va utiliser une fonction interne. Une méthode dup qui va nous permettre très rapidement de créer une chaine par recopie d’une autre en allouant de la mémoire. Alors cette allocation se fait avec new char [ ici. Et cette mémoire allouée elle est d’une taille un peu particulière. Donc là je m’attarde sur cette partie-là qui est un peu compliquée. La taille qu’on a reçu en paramètre de cette fonction est soit inférieure à zéro, c’est qu’on ne connait pas la taille de la chaîne et il faut la calculer avec strlen, ici. Soit on la connait, et donc on l’utilise. Une astuce qui va nous permettre de gagner du temps, pour ne pas avoir à recalculer la taille d’une chaîne dont on connait déjà la taille. Et puis un +1 dans la taille du tableau qu’on va allouer. Parce qu’il faut penser à allouer assez de place pour le zéro terminal qu'on toutes les chaines c. Et une fois qu’on a alloué ça on le passe donc tout ça au strcpy, qui copie src dans le tableau qui est là, qu’on vient d’allouer. On retourne donc cette zone mémoire, et donc c’est une fonction qui sera très pratique pour toutes nos initialisations dans nos constructeurs. Alors justement on peut commencer dès maintenant à écrire nos constructeurs. Le premier constructeur par défaut, une taille nulle. J’initialise directement un de mes champs avant les accolades, puisque le c++ permet cette notation. Et j’initialise avec ma méthode dup une chaîne vide ici en précisant quand même lataille. Ça m’évitera de recalculer cette taille. On log ici toujours sans accent pour les problèmes de console Windows, un constructeur par défaut. Donc on peut reprendre ce schéma de code ici avec une différence près. Déjà il ne faut pas oublier les deux points. Je vais reprendre une bonne version en la copiant. Et une différence près ici, c’est que je dois calculer la longueur de val, mais je ne vais pas le calculer deux fois donc je repasse taille. C’est un constructeur avec paramètres. Voilà, on va l’orthographier correctement. On a aussi le constructeur de copie. Donc là on va, constructeur copie, qui prend une valeur en paramètre qui est autre. C’est la taille ici. Et ici donc je vais dupliquer le contenu de cette autre chaine. Voilà en utilisant l’accesseur val. Enfin donc le constructeur de déplacement. Donc le but est de déplacer ce qu’il y a dans autre dans notre classe. Alors on le fait en utilisant la méthode move. Sur un entier ici taille ce n’est pas très intéressant d’utiliser move, mais c’est une bonne habitude à prendre d’utiliser move, quand vous avez des objets plus complexes par exemple ici. Pour notre pointeur unique, on a une vraie utilité à utiliser move, puisque ici on va avoir un déplacement. Le champ val qui est un pointeur unique intelligent de notre autre instance, va être mis à nul après avoir été déplacé dans val. Donc on a une vraie utilité ici, pour une bonne gestion de mémoire et une gestion sécurisée de la mémoire. Alors dernière opération quand même, c’est que nous notre classe compte sur le fait que le pointeur unique contient toujours une adresse valide. Donc l’autre ici il faut que je le reset. Si je le redéfinie, c'est un pointeur qui est sur une chaine vide pour que ce soit une citation cohérente. Et donc l’autre ici en faisant ce dup ici, je lui donne un état qui est d’une chaine vide. Et pour la taille, je la mets à zéro. Je peux éventuellement utiliser cette taille zéro ici. Donc j’ai implémenté tous mes constructeurs. Donc pensez bien sur un déplacement à remettre si c’est pas fait par le move votre objet dans un état cohérent. Si l’état cohérent était avec nul, j’aurais très bien pu laisser le move tel quel. Mon destructeur n’a rien à faire puisque j’ai un pointeur unique ici un pointeur intelligent. La mémoire sera libérée à la destruction de l’objet, le pointeur unique s’assurant de la libération de la mémoire. Donc aucun problème ici, je n’ai pas à effectuer de traitement spécifique pour mon destructeur. Donc, j’ai maintenant implémenté toutes les méthodes de construction et de destruction. Je peux exécuter mon code. Alors une erreur de compilation, ici, qui est juste dûe au fait que j’ai utilisé _val au lieu de val pour la méthode. Donc maintenant on corrige cette erreur. Et donc on a bien tous nos tests qui passent et les constructions par défaut, par valeur par copie et par déplacement, sans fuite mémoire. Voilà la première étape effectuée. On va pouvoir maintenant s’intéresser aux méthodes utiles de notre classe.

C++ : Création d'une bibliothèque de chaînes de caractères

Acquérez les méthodes de développement en C++ avec la création de bibliothèques de chaînes de caractères personnalisées. Abordez les constructeurs, les structures de données, etc.

45 min (10 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :24 oct. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !