Classe chaine utilisée comme type. exemple de classe pour débutants

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 350 fois - Téléchargée 29 fois

Contenu du snippet

C'etait un devoir que je devais faire. Il utilise le principe objet. Instanciation, constructeur et destructeur, surcharge d'operateurs.
Vous m'excuserez si il y a quelque chose qui bug... OU QUI MANQUE

Source / Exemple :


fichier Chaine.h : 
Code: 

class Chaine { 
private : 
   char * chaine; 

public : 
        Chaine();//constructeur par défaut 
        Chaine(char * pChaine);//constructeur parametre 
        Chaine(const Chaine & C); // constructeur par recopie 
        ~Chaine(); 
        Chaine& operator = (Const Chaine & C); //surcharge de l'operateur d'affectation 
        int operator == (Chaine C); //  surcharge de l'operateur de comparaison 
        char * ObtenirCaractere();//méthode d'acces à l'attribut caractere 
        void ModifierCaractere(char * pChaine); //méthode de modification du caractere 
        friend std::ostream& operator <<(std::ostream& os, const Chaine& C); //affichage 
}; 

fichier Chaine.cpp : 
Code: 
#include "Chaine.h" 
#include <iostream> 
#include <string.h> 

Chaine::Chaine(char * pChaine ="")    //constructeur parametre + par défaut 
{ 
        Chaine = new char[strlen(pChaine)+1]; 
        strcpy(Chaine, pChaine); 
} 

Chaine::Chaine(const Chaine & C)   // constructeur par recopie 
{ 
        Chaine = new char[strlen(C.chaine)+1]; 
        strcpy(chaine, C.chaine); 
} 

Chaine::~Chaine() 
{ 
        delete [] Chaine; 
} 

Chaine& Chaine::operator = (Const Chaine & C)    //surcharge de l'operateur d'affectation 
{ 
        char * temp = new char[strlen(C.Chaine)+1]; 
        strcpy(Chaine, C.ObtenirCaractere()); 
        delete [] Chaine; 
        Chaine = temp; 
        return *this; 
        //ancien code : (celui du cours) 
        //int longueur = strlen(C.ObtenirCaractere())+1; 
        //delete [] Chaine; 
        //Chaine = new char[longueur]; 
        //strcpy(Chaine, C.ObtenirCaractere()); 
        //return *this; 
} 

bool Chaine::operator == (Chaine C) //  surcharge de l'operateur de comparaison 
{ 
        return !strcmp(Chaine, C.obtenircaractere()); 
} 

char * Chaine::ObtenirCaractere() const//méthode d'acces à l'attribut caractere 
{ 
        return Chaine const; 
} 

void Chaine::ModifierCaractere(char * pChaine) //méthode de modification du caractere 
{ 
        delete [] Chaine; 
        Chaine = new char [strlen(pChaine)+1]; 
        strcpy(Chaine, pChaine); 
} 

std::ostream& operator <<(std::ostream& os, const Chaine& c) 
{ 
        return os << C.Chaine; 
}

A voir également

Ajouter un commentaire

Commentaires

BlackGoddess
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

et les constances ?

class Chaine {
private :

=> inutile, par défaut les membres d'une classe sont privés

char * ObtenirCaractere(); dans la déclaration

char * Chaine::ObtenirCaractere() const
{
return Chaine const;
}

dans la définition ... c pas le meme prototype
le 2eme prototype est considéré constant pour l'objet alors qu'il ne retourne pas un pointeur constant sur un attribut :o

=>
const char * Chaine::ObtenirCaractere() const
{
return Chaine;
}
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
ben c'est un peu lege et pas fonctionnel vu qu'on peut pratuquement rien faire avec

pourquoi pas d'operateur [] ? operateur += et + ? methode find ? ...
commet on connai la taille ?

#include <string.h> ==> #include <cstring>

std::strlen
std::strcpy
std::strcmp
...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.