begin process at 2012 05 29 16:40:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Prob avec "!"


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Prob avec "!"

jeudi 25 mars 2004 à 06:52:32 | Prob avec "!"

saturne_1606

Bonjour a tous!

Voila, mon prob est que g créer une classe qui permet de manipuler des ensembles d'entier. Et là, g une fonction membre qui vérifie si 2 ensembles sont égaux qui est codé comme ceci :


bool ens_entiers::operator ==(ens_entiers e)
{
if (nb!=e.card()) return false;
for(int i=0;i<nb;i++)
{
if ((e[tab[i]])==0) return false;
}
return true;
}


je precise que ma classe est la suivante :


class ens_entiers
{
private :
int *tab;
int nb;
public :
ens_entiers(int [] = NULL, int = 0);
void operator <(int);
int card();
bool operator [](int);
bool operator ==(ens_entiers);
bool operator !=(ens_entiers);
//Rajout d'une fonction pour afficher
void affiche();
~ens_entiers();
};

C lors de la définition de la fonction != qu'intervient mon prob.
Le code est le suivant :


bool ens_entiers::operator !=(ens_entiers e)
{
return !((*this)==e);
}


Le prob est que c deux fonctions me renvoie la même valeur de vérité.
Et là, g bo chercher mais je trouve pas le prob

Merci de m'accorder votre aide
jeudi 25 mars 2004 à 15:42:16 | Re : Prob avec

PunkDude424

Je sais pas si cest une faute de frappe ou koi mais ta un espace entre operator et !=.....y faut pas....et de plus tu devrais p-e donner un meilleur nom a tes fonction.....c'est pas tres bine de mettre des signe tel que !, = ou autre dans le nom dune fonction
jeudi 25 mars 2004 à 20:00:47 | Re : Prob avec

djl


PunkDude424 ==> ben non, la syntaxe de ce qu'il a ecris est correcte
"c'est pas tres bine de mettre des signe tel que !, = ou autre dans le nom dune fonction "
==> il s'agit la de la surcharge des operateur en c++

saturne_1606 ==> ton erreur est assez bizar, j'ait fait un test avec une classe (sans pointeurs) et ca marche,

au pir tu redefini l'operateur != sans te servir du ==

bonne chance
jeudi 25 mars 2004 à 22:01:12 | Re : Prob avec

saturne_1606


merci pour ta reponse djl mais g deja essayer cette possibilité.
En fait, aprés plusieurs test je me suis apercu que la fonction == que g defini change le premier element de l'ensemble mis en parametre. Par exemple, si l'ens entrer en para est {4,2,3,1}, aprés l'execution de la fonction, elle sera {2242504,2,3,1}. Cependant, d'aprés mes tests l'ensemble est toujours le mm juste avant le "return true" de la la fin de fonction. Et là, je dis que je comprends plus rien?§?!

Merci pour votre aide
jeudi 25 mars 2004 à 23:26:56 | Re : Prob avec

djl

ya pourtant un moyen de s'en assurer,

dans ton exemple cette implementation avec passage par reference marchera

bool ens_entiers::operator ==(const ens_entiers& e) const
{
if (nb!=e.card()) return false;
for(int i=0;i<nb;i++)
{
if ((e[tab[i]])==0) return false;
}
return true;
}

ca marchera car je vien de piger ton erreur, tu passe un ensemble par valeur et tu n'a pas de constructeur par copie donc c'est celui qui est implicitement generer par ton compilo qui est appeler et qd ya un pointeur ca fait boum

quand tu fait une classe qui a un pointeur comme membre pense a redefinir le constructeur, le constructeur par copie, le destructeur, et l'operateur =
jeudi 25 mars 2004 à 23:34:07 | Re : Prob avec

saturne_1606

Merci bcp pour ton aide djl
En fait g trouver la solution, qui est comme ce que tu as dit :

bool ens_entiers::operator ==(ens_entiers &e)
{
if (nb!=e.card()) return false;
for(int i=0;i<nb;i++)
{
if ((e[tab[i]])==0) return false;
}
return true;
}

mais je comprenais pas pourquoi il fallait mettre le &.
Grace à toi, maintenant je sais
Merci encore
jeudi 25 mars 2004 à 23:45:26 | Re : Prob avec

djl


autre solution aussi mais qui est surtout une necessite c'est de redefinir le constructeur par copie



ens_entiers(const ens_entiers& e)
{
nb=e.nb;
tab=new int[nb];
for(int i=0;i<nb;i++) tab[i]=e.tab[i];
}


et ton operateur pourra marcher ainsi


bool ens_entiers::operator ==(ens_entiers e) const
{
if (nb!=e.card()) return false;
for(int i=0;i<nb;i++)
{
if ((e[tab[i]])==0) return false;
}
return true;
}


tu fera attention que la methode est declarer const car l'operateur n'a pas besoin de modifier l'objet cible donc par defaut on le protege avec const

de meme lorsque tu passe un objet par reference, c'est sont adresse que tu passe donc si tu le modifie ca sera plus une copie qui est modifié mais l'objet lui meme, c'est pourquoi il est utile de le proteger par un const lorsque tu n'a pas besoin de le modifier


bool ens_entiers::operator ==(const ens_entiers &e) const
{
if (nb!=e.card()) return false;
for(int i=0;i<nb;i++)
{
if ((e[tab[i]])==0) return false;
}
return true;
}


a+


Cette discussion est classée dans : entiers, code, int, operator, ens


Répondre à ce message

Sujets en rapport avec ce message

comment evoyer des entiers par les sockets [ par JRB ] je n'arrive pas à envoyer des variables declarees integer par socket.j'utilise :int nResult = m_ClientSocket[0].Send(LPCTSTR(strTemp), nSize); calculatrice matricielle avec boost::shared_array [ par mosaidrd ] le code ne genere aucune ereur mais il rencotre un problem d'assertion merci pour votre aide voici mon code : [code=cpp] //fichier Matrix.h #ifndef M Déclarer explicitement une conversion de int => Enum [ par RV2931 ] Bonjour, J'ai pas mal d'énumération dans mon programme et j'ai souvent besoin de de prendre un simple int en entrée et de le convertir en l'Enumérati rectification dune code C et/ou aide sur l'algorithme [ par negets ] bonjour, besoin d'aide; j'aimerai dégager l'algorithme de ce code afin de le programmer sous matlab je connais plus rien en C et C++(je commence à lir code source en C [ par lyna191 ] Bonsoir a tous , as que il y quelqu'un parmi vous qui peut m'explique ce code la (explication de la fonction Deplace) ? merci [code=cpp] int Deplac IntToStr en C [ par RENTMEESTERS ] bonjour à tous, Je dois convertir un nombre entier INT en une chaîne de caractère qui devra être affichée sur un LCD (*char). J'utilise un 16F887 et programme puissance suivant le protocole rpc [ par imoum ] j'ai une structure [code=cpp]param{int a; int b;}; [/code]et j'ai une fonction dans le programme serveur [code=cpp]pui_2_svc(param *argp, struct svc_ utilisation de atoi() [ par ims214 ] Bonjour, dans mon code j'ai déclaré: [code=cpp]WCHAR Xchar[10][/code] le programme rempli cette chaine à partir d'un index variable, par exemple: [co sdl et vc++2010 [ par hb2012 ] slt tout le monde, je sais bien mes amis que c'est pas possible d'afficher une image avec c++. par contre je m'adresse à vous pour savoir s'il existe


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,714 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales