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