//deux lignes suivantes : pour les entrees/sorties
#include <iostream>
using namespace std;

//la classe chaine
class chaine
{
      //prives par defaut
      char* string;
      unsigned int size;
      
      public :
             //constructeur
             //par defaut
             chaine()
             {
                     string=new char;
                     size=0;
             };
             //avec un parametre
             chaine(char* str)
             {
                     string=str;
                     size=strlen(string);    
             };
             
             //destructeur
             //par defaut
             ~chaine()
             {
                      delete[] string;
                      delete &size; //delete ne prend que des pointeurs
             };
             
             unsigned int getsize()
             {
                      return size;
             };
             char* getstring()
             {
                   return string;
             };
             void addstring(char* str)
             {
                  strcat( string, str );
                  size=strlen(string);             
             };
             void replacestring(char* str)
             {
                  string=str;
                  size=strlen(string);             
             };

};

void afficher_donnees(chaine c1)
{
     cout
    <<"taille : "<<c1.getsize()
    <<" et chaine : "<<c1.getstring()
    <<endl;
}

//le point d'entree du programme
int main(void)
{
    //instanciation d'une chaine
    chaine c1;
    
    //appel de methodes
    c1.addstring("barde");
    c1.addstring(" et");
    c1.addstring(" dragon");
    afficher_donnees(c1);
    
    c1.replacestring("Huhuhu");
    afficher_donnees(c1);
    
    //suppression de la chaine c1
    delete &c1;

    //instanciation d'une chaine par appel explicite
    chaine *c2 = new chaine("contructeur avec un parametre");
    
    //suppression de la chaine c2
    delete c2;
//ne fonctionne pas :
    //chaine *c3 = {new chaine("a"), new chaine("b")};
    
    //fonction bloquante
    char a ;
    cin>>a;
}

