Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TUTORIAL OPERATEURS PARTIE 1


Information sur la source

Catégorie :Divers Niveau : Initié Date de création : 18/10/2002 Date de mise à jour : 18/10/2002 19:20:48 Vu : 1 897

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Pour clarifier ma programmation, j'utilise les operateurs et je vous encourage à le faire.
Ce tutorial est dans la continuité de celui sur DPString (En fait il utilise les fonctions windows cachées par des operateurs)
 

Source

  • /*
  • je considere que pour une programmation lisible, on declare d'abord puis on definit
  • voire la declaration dans un header et la definition dans un source
  • comme ca on a juste à faire un include dans un autre source pour pouvoir utiliser la classe
  • Ce tutorial ne necessite que peu de connaissances en c++
  • */
  • /**************************************************************************************/
  • // MaClasseAvecOps.h
  • #include <windows.h>
  • class MaClasseAvecOps
  • {
  • INT entier;
  • CHAR caractere;
  • /*
  • les types definis par windows sont les memes que les types de
  • base du C++ mais en majuscule (ils sont sur 32 bits ce qui est plus rapide)
  • j'utiliserai ceux-ci par habitude mais vous pouvez faire comme vous le voulez.
  • */
  • public: // les operateurs DOIVENT etre publics.
  • BOOL operator ==(INT i); // l'operateur == renvoie un booleen et prend en parametre le type voulu
  • BOOL operator ==(CHAR c); // on surcharge l'operateur ==
  • // comme ca si on fait "truc == caractere" ou "truc == nombre", le compilateur choisit la fonction
  • BOOL operator ==(MaClasseAvecOps C); // truc super bien des operateurs : on compare deux classes de meme type utilisateur
  • VOID operator =(INT i); // l'operateur = est comme == mais ne renvoie rien
  • VOID operator =(CHAR c);
  • VOID operator +=(INT i);// +=, -=, ++ et -- retournent VOID
  • VOID operator -=(INT i);
  • VOID operator ++();// ++ et -- ne prennent aucun parametre
  • VOID operator --();
  • };
  • /**************************************************************************************/
  • // main.cpp
  • void main()
  • {
  • MaClasseAvecOps Ops;
  • /*
  • on instancie sans new avec pointeurs car il existe deja des operateurs pour les pointeurs ex:
  • MaClasseAvecOps *Ops = new MaClasseAvecOps;
  • // impossible:
  • Ops = 'a';
  • // je crois qu'il faut faire un truc du genre
  • (*Ops) = 'a';
  • //ou
  • Ops->operator =('a'); // appel explicite
  • // c'est moins pratique et on perd le fait qu'un operateur soit un operateur (mais possible)
  • */
  • Ops = 1; // le int membre est egal à 1
  • Ops = 'b'; // le char membre est egal à 'b'
  • Ops++; // le int membre est egal à 2
  • Ops -= 15; // le int membre est egal à -13
  • }
  • /**************************************************************************************/
  • // MaClasseAvecOps.cpp
  • BOOL MaClasseAvecOps::operator ==(INT i)
  • {
  • return (entier == i); // on utilise ici l'operateur par defaut du c++ sur les int
  • // on se rapporte toujours aux connaissances de base
  • }
  • BOOL MaClasseAvecOps::operator ==(CHAR c)
  • {
  • return (caractere == c);
  • }
  • BOOL MaClasseAvecOps::operator ==(MaClasseAvecOps C);
  • {
  • return ((C.caractere = caractere) && (C.entier = entier))
  • }
  • VOID MaClasseAvecOps::operator =(INT i)
  • {
  • entier = i;
  • }
  • VOID MaClasseAvecOps::operator =(CHAR c)
  • {
  • caractere = c;
  • }
  • VOID MaClasseAvecOps::operator +=(INT i)
  • {
  • entier += i;
  • }
  • VOID MaClasseAvecOps::operator -=(INT i)
  • {
  • entier -= i;
  • }
  • VOID MaClasseAvecOps::operator ++()
  • {
  • entier++;
  • }
  • VOID MaClasseAvecOps::operator --()
  • {
  • entier--;
  • }
/* 
    je considere que pour une programmation lisible, on declare d'abord puis on definit
    voire la declaration dans un header et la definition dans un source
    comme ca on a juste à faire un include dans un autre source pour pouvoir utiliser la classe
    Ce tutorial ne necessite que peu de connaissances en c++
*/

/**************************************************************************************/
// MaClasseAvecOps.h
#include <windows.h>

class MaClasseAvecOps
{
    INT entier;
    CHAR caractere;
/* 
    les types definis par windows sont les memes que les types de 
    base du C++ mais en majuscule (ils sont sur 32 bits ce qui est plus rapide)
    j'utiliserai ceux-ci par habitude mais vous pouvez faire comme vous le voulez.
*/

public: // les operateurs DOIVENT etre publics.
    BOOL operator ==(INT i); // l'operateur == renvoie un booleen et prend en parametre le type voulu
    BOOL operator ==(CHAR c); // on surcharge l'operateur == 
	// comme ca si on fait "truc == caractere" ou "truc == nombre", le compilateur choisit la fonction
    BOOL operator ==(MaClasseAvecOps C); // truc super bien des operateurs : on compare deux classes de meme type utilisateur
    VOID operator =(INT i); // l'operateur = est comme == mais ne renvoie rien
    VOID operator =(CHAR c);
    VOID operator +=(INT i);// +=, -=, ++ et -- retournent VOID
    VOID operator -=(INT i);
    VOID operator ++();// ++ et -- ne prennent aucun parametre
    VOID operator --();
};

/**************************************************************************************/
// main.cpp

void main()
{
    MaClasseAvecOps Ops;
    /* 
        on instancie sans new avec pointeurs car il existe deja des operateurs pour les pointeurs ex:
        MaClasseAvecOps *Ops = new MaClasseAvecOps;
        // impossible:
        Ops = 'a';
        // je crois qu'il faut faire un truc du genre 
        (*Ops) = 'a';
        //ou
        Ops->operator =('a'); // appel explicite
        // c'est moins pratique et on perd le fait qu'un operateur soit un operateur (mais possible)
    */
    Ops = 1; // le int membre est egal à 1
    Ops = 'b'; // le char membre est egal à 'b'
    Ops++; // le int membre est egal à 2
    Ops -= 15; // le int membre est egal à -13
}

/**************************************************************************************/
// MaClasseAvecOps.cpp


BOOL MaClasseAvecOps::operator ==(INT i)
{
    return (entier == i); // on utilise ici l'operateur par defaut du c++ sur les int
    // on se rapporte toujours aux connaissances de base
}

BOOL MaClasseAvecOps::operator ==(CHAR c)
{
    return (caractere == c);
}

BOOL MaClasseAvecOps::operator ==(MaClasseAvecOps C);
{
    return ((C.caractere = caractere) && (C.entier = entier))
}

VOID MaClasseAvecOps::operator =(INT i)
{
    entier = i;
}

VOID MaClasseAvecOps::operator =(CHAR c)
{
    caractere = c;
}
VOID MaClasseAvecOps::operator +=(INT i)
{
    entier += i;
}

VOID MaClasseAvecOps::operator -=(INT i)
{
    entier -= i;
}

VOID MaClasseAvecOps::operator ++()
{
    entier++;
}
VOID MaClasseAvecOps::operator --()
{
    entier--;
}

Conclusion

J'ai conçu ce code "à la main" au notepad, il n'a donc pas été testé mais devrait etre compatible avec Dev-C++.
Si vous avez des erreurs faites les parvenir

Visitez http://dreamproject.free.fr
 

Commentaires et avis

signaler à un administrateur
Commentaire de Kaid le 18/10/2002 20:05:56

Tu n'as pas compilé ton code, d'où 2 petites erreurs:

1- BOOL MaClasseAvecOps::operator ==(MaClasseAvecOps C); -&gt; le ;
2- ((C.caractere = caractere) && (C.entier = entier)) -&gt; cmp par = et non ==

Sinon les 'BOOL' Windows, c'est simplement un typedef (long) pour palier l'absence du type 'bool' en C.  

signaler à un administrateur
Commentaire de ensiame le 14/03/2004 16:58:53

Il est dommage que l' operator+ soit absent. Est-ce parce qu'il est inutile, ou est-ce uniquement un oubli?

signaler à un administrateur
Commentaire de Ilsundal le 23/02/2007 16:20:33

domage aussi que l'opérateur ++ ne soit pas redefini.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.