IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Portabilitée : Surcharge opérateur de comparaison


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut Portabilitée : Surcharge opérateur de comparaison
    Bonjour,

    J'ai surchargé les 6 opérateurs de comparaison pour comparer un identifiant.
    La surcharge marche parfaitement sous Windows et Linux Mandriva 2007 mais lorsque je le met sur un server Unix ces surcharges ne fonctionnent plus ?? (Plus précisement il affiche toujours que les 2 identifiants sont différent) Or sur les autres plateformes ca marche.

    Voici l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    system("cls");
    cout<<endl<<"\t\t\t\t\t\tOPERATEUR DE COMPARAISON"<<endl;
    cout<<"\t\t\t\t\t\t------------------------"<<endl<<endl;
     
    log<<"Test des opérateurs de comparaison";
    if((pm2.getID() < pm.getID()))
    cout<<" * ID de PM2 est plus petit que ID de PM"<<endl<<endl;
    f((pm.getID() <= pm2.getID()))
    cout<<" * ID de PM est plus petit ou egale a ID de PM2"<<endl<<endl;
    if((pm2.getID() > pm.getID()))
    cout<<" * ID de PM2 est plus grand que ID de PM"<<endl<<endl;
    if((pm2.getID() >= pm.getID()))
    cout<<" * ID de PM2 est plus grand ou egale a ID de PM"<<endl<<endl;
    if((pm.getID() == pm2.getID()))
    cout<<" * ID de PM est egale a ID de PM2"<<endl<<endl;
    if((pm.getID() != pm2.getID()))
    cout<<" * ID de PM est different de ID de PM2"<<endl<<endl; 
    system("PAUSE");
    break;
    et le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    int Identifiant::operator<(Identifiant & id)
    {
    	if((strcmp(toString(), id.toString())) == -1)
    		return 1;
    	return 0;
    }
     
    int Identifiant::operator<=(Identifiant & id)
    {
    	if((strcmp(toString(), id.toString())) == -1)
    		return 1;
    	return 0;
    }
     
    int Identifiant::operator>(Identifiant & id)
    {
    	if((strcmp(toString(), id.toString())) == 1)
    		return 1;
    	return 0;
    }
     
    int Identifiant::operator>=(Identifiant & id)
    {
    	if((strcmp(toString(), id.toString())) == 1)
    		return 1;
    	return 0;
    }
     
    int Identifiant::operator==(Identifiant & id)
    {
    	if((strcmp(toString(), id.toString())) == 0)
    		return 1;
    	return 0;
    }
     
    int Identifiant::operator!=(Identifiant & id)
    {
    	if((strcmp(toString(), id.toString())) != 0)
    		return 1;
    	return 0;
    }
    La méthode getID() retourne biensur un objet Identifiant.
    Avez vous une idée sur la raison du mauvais fonctionnement ???

    Merci
    Bonne journée

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Par défaut
    J'ai trois questions :
    - Est-ce normal que des opérateurs de comparaison ne renvoient pas un booléen ?
    - Est-ce normal que tu ne puisse pas utiliser tes opérateurs de comparaison sur des objets constant ?
    - Es-tu sur que strcmp("A", "B") ne renverra que -1, 0 ou 1 ?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    Citation Envoyé par Volune
    Es-tu sur que strcmp("A", "B") ne renverra que -1, 0 ou 1 ?
    A mon avis ça vient de là. Dans les spec de strcmp ça renvoie une valeur positive, négative ou nulle. Sûrement que sous Windows et Linux c'est par hasard toujours -1, 1 ou 0, alors que sous Unix ce n'est pas le cas.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    au fait, pourquoi utiliser "strcmp" qui est + du C qu'autre chose dans un développement purement C++ ?

  5. #5
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    et pourquoi écrire tous les opérateurs de comparaison alors qu'ils se déduisent tous de < et == ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    <= et >= sont pas bons...

    Il les réecrit à chaque fois tout simplement parce que c'est en O(n).
    Si on définit <= comme < ou =, alors on parcourera deux fois la chaîne, ce qui est inutile.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Surcharge opérateur comparaison et pointeurs
    Par jp.lorient dans le forum Débuter
    Réponses: 12
    Dernier message: 04/05/2009, 14h09
  2. surcharge opérateur << et >>
    Par Azharis dans le forum Débuter
    Réponses: 11
    Dernier message: 02/11/2005, 21h22
  3. implémentation des opérateurs de comparaison
    Par niko8181 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 28/04/2005, 11h58
  4. Surcharge opérateurs
    Par ghostdogpr dans le forum C++
    Réponses: 5
    Dernier message: 18/03/2005, 11h51
  5. Réponses: 15
    Dernier message: 25/01/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo