Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

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

Découvrir les opérateurs

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Surchargez les opérateurs standards et simplifiez la manipulation de votre type chaîne. Puis, comparez les types primitifs.

Transcription

Pour que notre classe Chaine rivalise avec la classe Chaine standard, il faut qu'elle propose un grand nombre d'opérateurs. Nous allons implémenter un opérateur d'affectation, des opérateurs de concaténation += et + des opérateurs d'accès aux caractères de notre chaîne, soit constants, si notre chaîne est constante, soit des références pour pouvoir modifier un caractère de la chaîne, et un opérateur de conversion en chaîne de caractères standard C pour les fonctions qui ne connaissent pas notre classe pour qu'elles puissent fonctionner avec nos chaînes de caractères. Le explicit ici signifie que le cast devra être fait de façon explicite pour éviter toute ambiguïté. Enfin, des opérateurs de comparaison qui comme la convention STL le demande, le plus prioritaire est de faire le inférieur. À partir du inférieur on peut, comme on le voit ici, implémenter tous les autres opérateurs. Prenons un exemple, le supérieur ou égal, c'est le non inférieur, donc ici la négation non inférieure. Alors, cette astuce, on arrive à implémenter avec une seule méthode cinq autres méthodes de surcharge d'opérateurs de comparaison. Le inline ici est là pour rendre plus rapide l'appel à nos opérateurs et le rendre transparent. Puisque l'appel ne sera pas fait, c'est ce code qui remplacera l'appel. Ces opérateurs sont toujours testés au niveau d'un main. Le test est écrit pour ces différents opérateurs. Donc, une grande quantité de tests pour tester toutes les situations, y compris lors de l'affectation par la sémantique de déplacement, on move ou on swap, lorsqu'on permute a et b, par exemple vérifier que le « Au revoir » qui est dans b passe dans a et le « Bonjour » qui est dans a passe dans b. Implémentons maintenant nos opérateurs pour passer ces tests. Commençons par les plus simples. L'opérateur de conversion par exemple consiste à retourner ce que retourne notre accesseur val. Les opérateurs crochets sont eux aussi relativement simples à écrire. Ils consistent à tester l'indice qu'on nous demande. S'il est dans les limites de notre chaîne, retournez le caractère concerné, sinon levez une exception pour éviter tout problème et signaler le bug, puisqu'on nous demande un index non valide. L'opérateur de comparaison inférieure est lui aussi très facile à écrire et consiste à appeler le strcmp standard. S'il est inférieur à zéro, la première chaîne est inférieure à la seconde. Intéressons-nous maintenant à l'opérateur d'affectation. Celui-là est particulier, on reçoit par valeur, et c'est voulu, la chaîne de caractères. C'est un opérateur d'affectation qui utilise l'idiome copy-swap, qui est un idiome qui sécurise l'affectation et qui permet de gérer à la fois la sémantique de déplacement et à la fois une copie. Donc on a, par cet idiome qui indique qu'il faut permuter les différents membres quelque chose de très efficace et d'optimisé dans toutes les situations. Un idiome étant une méthode de programmation usuelle. On va maintenant implémenter les opérateurs de concaténation, donc le += ici va consister à concaténer une chaîne à la notre, celle qui est actuellement traitée à gauche du += Il faudra donc prendre la taille de la chaîne reçue en paramètre, l'ajouter à la taille courante et on a ainsi la nouvelle taille, qui est ici. On alloue cette zone mémoire avec un new char, avec +1 pour le zéro terminal toujours, ne jamais l'oublier. Donc, cette nouvelle zone mémoire, on la remplit avec un strcpy en prenant la valeur actuelle de notre chaîne. On ajoute ensuite, alors on aurait pu utiliser un strcat, connaissant la taille, on ne va pas chercher la fin avec le strcat, on va directement avec le strcpy se placer au bon endroit pour copier l'autre chaîne aussi. Une fois ces deux opérations faites, on peut remplacer l'ancienne zone mémoire désignée par notre pointeur intelligent unique val, désigner la nouvelle zone mémoire. L'ancienne sera libérée par le pointeur intelligent. Le nouv_taille remplace taille et on a maintenant une chaîne correctement concaténée. Une dernière chose, et pas des moindres, la concaténation. Comme on a deux opérateurs de concaténation, on en a un à l'intérieur de la classe, ici Chaine::operator, et l'autre à l'extérieur, operator tout seul, pour supporter à la fois le + où on a une chaîne à gauche du +, et le + pour supporter, quand on a une chaîne classique à gauche du + et une chaîne de notre classe à droite du +, dans ces deux cas de + ici, on va essayer d'avoir un code commun pour les deux, donc on va créer une méthode commune, concatener. Voilà, celle-là. Cette méthode concatener va pouvoir être utilisée à la fois sur le + qui est dans la classe, mais parce qu'elle est statique, être aussi utilisée à l'extérieur de la classe avec un Chaine::concat ici. Alors, attardons-nous sur son code. On crée une chaîne ici d'une certaine taille. On va voir comment et avec quel constructeur, et ensuite on recopie la première valeur, ici a. On la recopie au début de la chaîne qu'on a créée juste au-dessus et on recopie aussi b ici par strcpy, à la suite. Cette méthode concatener va être déclarée dans le .h mais on a aussi à définir ce constructeur un peu spécial qu'on n'a pas encore, qui va être un constructeur utilisé simplement par concatener, qui va permettre de créer une chaîne à la volée, mais d'après une taille simplement, ce qu'on n'a pas encore pour l'instant, on ne peut le faire qu'avec une autre chaîne. Donc, ce constructeur qui est interne et qui va être privé, on va le mettre plutôt vers la fin, puisqu'il a un usage bien spécifique. Il ne fait que définir la taille, allouer la zone mémoire et la passer à notre pointeur unique, et puis logger l'événement. On va déclarer donc Chaine et concaténer dans notre .h et nous aurons ainsi tous nos opérateurs. Donc, notre méthode statique concatener qu'on va définir ici, et notre constructeur ici. Je peux maintenant sauvegarder et exécuter. Donc, on a tous les tests qui passent. On a maintenant un grand nombre d'opérateurs. Il ne nous reste plus qu'à ajouter des nouvelles fonctions de recherche et de remplacement pour concurrencer réellement notre classe standard std::string.

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
Votre/vos formateur(s) :
Date de parution :24 oct. 2016
Durée :45 min (10 vidéos)

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 !