Tutorial operateurs partie 1

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 737 fois - Téléchargée 36 fois

Contenu du snippet

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 / Exemple :


/* 
    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

A voir également

Ajouter un commentaire Commentaires
Messages postés
79
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
1 mars 2011

domage aussi que l'opérateur ++ ne soit pas redefini.
Messages postés
15
Date d'inscription
mercredi 10 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2005

Il est dommage que l' operator+ soit absent. Est-ce parce qu'il est inutile, ou est-ce uniquement un oubli?
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

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

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

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

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.