Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > C > Les unions > Lecture des commentaires

Les unions

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Pseudo Commentaire
Page : 1 
Hors ligne azerty9 # Posté le 26/09/2006 à 12:43:03 - Ce membre a mis la note : 18
Newbie de profession
Avatar
Groupe : Membres
On comprend bien le principe, c'est expliqué clairement.

Ca mérite un bonne note.

"L'information n'est pas la connaissance. La connaissance n'est pas la sagesse. La sagesse n'est pas la vérité. La vérité n'est pas la beauté. La beauté n'est pas l'amour. L'amour n'est pas la musique. La musique est la meilleure des choses.", Frank Zappa
 
Hors ligne Herbiti # Posté le 27/09/2006 à 11:39:32 - Ce membre a mis la note : 20
Avatar
Groupe : Membres
Bonjour,

Grâce à ce tuto, j'ai su faire un truc que je n'aurais pas su faire avant: faire un tableau d'éléments de type différents.

Voici ma classe:
Code : C++
class TEMPLATE
{
    private:
        union TEMP
        {
              friend class TEMPLATE;
              private:
                      int Int;
                      double Double;
                      char Char;
                      bool Bool;
              public:
                     TEMP() {}
                     TEMP(int i) {Int=i;}
                     TEMP(double d) {Double=d;}
                     TEMP(char c) {Char=c;}
                     TEMP(bool b) {Bool=b;}
                     
                     operator int() {return Int;}
                     operator double() {return Double;}
                     operator char() {return Char;}
                     operator bool() {return Bool;}
        };
        TEMP *Temp;
        TYPE Type;
    public:
        TEMPLATE() {Temp=new TEMP;}
        TEMPLATE(int i) {Temp=new TEMP(i); Type=INT;}
        TEMPLATE(double d) {Temp=new TEMP(d); Type=DOUBLE;}
        TEMPLATE(char c) {Temp=new TEMP(c); Type=CHAR;}
        TEMPLATE(bool b) {Temp=new TEMP(b); Type=BOOL;}   
       
        TEMPLATE(const TEMPLATE &Template) {Copier(Template);}
        TEMPLATE &operator=(const TEMPLATE &Template) {if (&Template!=this) {Effacer(); Copier(Template);} return (*this);}
       
        ~TEMPLATE() {Effacer();}
       
        operator int() {if (Type==INT) return int(*Temp); else return 0;}
        operator double() {if(Type==DOUBLE) return double(*Temp); else return 0;}
        operator char() {if(Type==CHAR) return char(*Temp); else return 0;}
        operator bool() {if(Type==BOOL) return bool(*Temp); else return false;}
       
        TYPE type() {return Type;}
       
        friend void operator<<(void*, TEMPLATE Template) {switch (Template.Type) {case INT: cout << int(Template); break; case DOUBLE: cout << double(Template); break; case CHAR: cout << char(Template); break; case BOOL: cout << bool(Template); break; default: cout << 0; break;}}
   
    private:
         void Copier(const TEMPLATE &Template) {Type=Template.Type; Temp=new TEMP(*Template.Temp);};
         void Effacer() {delete Temp;}
};


Et mon énumération:
Code : C++
enum TYPE {INT, DOUBLE, CHAR, BOOL};


Voici la fonction test:
Code : C++
TEMPLATE Fonction(TEMPLATE Template)
{
    if (Template.type()==INT)
       return (int(Template)+1);
    else if (Template.type()==DOUBLE)
       return (double(Template)*2);
    else if (Template.type()==CHAR)
       return (char(char(Template)+2));
    else if (Template.type()==BOOL)
       return (!bool(Template));
}


Et voici le main:
Code : C++
int main()
{
    int n=4;
    TEMPLATE *Tableau=new TEMPLATE[n];
   
    Tableau[0]=1;
    Tableau[1]=3.14159;
    Tableau[2]='T';
    Tableau[3]=false;
   
    for (int i=0; i<n; ++i)
    {
        Cout << Fonction(Tableau[i]);
        cout << endl;
    }
   
    delete[] Tableau;
    getch();
}

J'ajoute cela afin que le cout ne sois pas ambigü!
Code : C++
void* Cout;


Et comme par magie, la fonction agira différemment sur les éléments!

C'est vraiment génial :)

Herbiti

Secret (cliquez pour afficher)
20/20

Herbiti
 
Hors ligne Darkelfe # Posté le 19/10/2006 à 18:53:01 - Ce membre a mis la note : 20
Apprendre tout sur tout !
Avatar
Groupe : Membres
Tuto très pratique qui ouvre de nombreurse possibilité.

A lire à tous prix

Envie de partager vos créations avec d'autre programmeurs ? Une seule adresse :
Image utilisateur
 
Hors ligne xavierh # Posté le 31/08/2008 à 15:12:40 - Ce membre n'a pas mis de note
Peace & Love !
Avatar
Groupe : Membres
Je l'est lu, compris, mais si il y à un truc que je n'est pas compris dans les unions, c'est leur utilité.

Il y en a surement une mais bon, je ne la comprends tj pas :lol:
 
Hors ligne pylaterreur # Posté le 14/11/2008 à 14:25:02 - Ce membre n'a pas mis de note
Oscar Wilde != Wilde Sarco
Avatar
Groupe : Membres
Ca permet, entre autres, de connaitre l'endianness de ta machine.

Sinon, bon tuto :) .
 

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 95 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.042s (0.0314s)