Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Exercice 3
- Ecrire la classe String qui permet de stocker une chaine de caractères sous forme de mémoire allouée dynamiquement.
- class String
- {
- public:
- ...
- private: char *ch;//zone de mémoire alllouée dynamiquement (new) dans laquelle on
- //stocke la chaine de caractères
- };
- Ecrire un constructeur qui initialise l’objet à partir d’une chaine (const char*) reçue en
- paramètre : il alloue pour l’objet une zone mémoire dans laquelle il copie la chaine reçue.
- Lorsque le compilateur détruit une variable de type String, n’y a-t-il pas une action
- supplémentaire à faire, à la charge du programmeur ?
- Ecrire une fonction d’affichage.
- Ecrire une fonction qui change en majuscule chaque caractère de la chaine : on utilisera la
- fonction de <ctype.h> char toupper (char) qui retourne la majuscule correspondant au
- caractère en paramètre.
- Faire l’essai suivant montrant que le constructeur par copie crée par le compilateur ne
- convient pas :
- • Créer un objet String s1 et construire s2 par copie de s1 ; puis changer s2 en majuscules
- et afficher s1 et s1 ;
- • Constater le problème : s1 est aussi changé en majuscules.
- Ecrire un constructeur par copie approprié et constater que le programme fonctionne alors
- correctement.
- * */
- #include <iostream>
- #include <ctype.h>
- #include <string.h>
- using namespace std;
- class String
- {
- public:
- String();
- String(const char *chaine);
- ~String();//Free Destructeur
- void affiche()const;
- void Maj();
- private: char *ch;//zone de mémoire alllouée dynamiquement (new) dans laquelle on
- //stocke la chaine de caractères
- };
- String::String(const char *chaine)
- {
- ch = new char[strlen(chaine)];//(équivalent au malloc ce qui veux dire on doit faire un équivalent au Free afin de libérer l'espace mémoire')
- strcpy(ch,chaine);
- }
- String::~String()//Destructeur(Free)
- {
- delete [] ch;
- }
- void String::affiche()const
- {
- cout << "Chaine : " << ch << endl;
- }
- void String::Maj()
- {
- int i=0;
- while( ch[i] != '\0' )
- {
- ch[i] = toupper(ch[i]);
- }
- }
- int main(void)
- {
- String s1("hello");
- s1.affiche();
- String s2=s1;//Appel du constructeur par recopie
- s2.affiche();
- s1.Maj();
- s1.affiche();
- s2.affiche();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement