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 :

Eviter une syntaxe trompeuse.


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Par défaut Eviter une syntaxe trompeuse.
    Bonsoir.

    Supposons qu'on ait défini une classe MonTypeNumerique qui admette un constructeur de conversion à partir du type (intégré, mais peu importe) int.

    L'utilisateur peut alors écrire des choses comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int j = 3;
    MonTypeNumerique MonNombre = j;
    (Si je ne me trompe, c'est le constructeur de conversion qui intervient dans cette syntaxe, une surdéfinition de l'opérateur = n'a rien à voir ici.)

    Bon, vous allez peut-être trouver ça futile, mais je n'aime pas la syntaxe de la seconde ligne du code ci-dessus, il me semble qu'elle risque de faire perdre de vue à l'utilisateur que les deux membres ne sont pas du même type.
    J'aimerais donc mieux que l'utilisateur soit obligé d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    MonTypeNumerique MonNombre(j);
    ou peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    MonTypeNumerique MonNombre = MonTypeNumerique(j);
    J'aimerais savoir s'il est possible d'empêcher la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonTypeNumerique MonNombre = j;

    Merci d'avance pour les réponses.

    M.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    non, ce n'est pas possible, c'est une des caractéristique de C++, appeler = à la construction appele le constructeur... au lieu de l'opérateur =...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Par défaut
    Citation Envoyé par Swoög
    non, ce n'est pas possible, c'est une des caractéristique de C++, appeler = à la construction appele le constructeur... au lieu de l'opérateur =...
    Merci de la réponse.
    Je me demande si je suis le seul que cela met mal à l'aise...

    M.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Déclare ton constructeur avec le mot-clé explicit, c'est fait pour ça. Par contre effectivement je ne suis pas certain du comportement dans ce cas.

  5. #5
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par Laurent Gomila
    Déclare ton constructeur avec le mot-clé explicit, c'est fait pour ça.

    Je croyais que ça c'était uniquement pour éviter les conversions implicites !?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Par défaut
    Citation Envoyé par Laurent Gomila
    Déclare ton constructeur avec le mot-clé explicit, c'est fait pour ça. Par contre effectivement je ne suis pas certain du comportement dans ce cas.
    J'ai déclaré le constructeur "explicit" et, en effet, la syntaxe qui me déplaît est maintenant refusée par le compilateur.

    J'avais lu, en son temps, ce qui concerne "explicit", mais je n'en avais sans doute pas compris l'intérêt à l'époque.

    Merci beaucoup.

    M.

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Ca fait un peu effet de bord d'explicit: les convertions implicites ne sont plus possibles. La syntaxe de construction avec "=" est assimilée à la construction avec convertion implicite.

    Quand à beurk! Dans la catégorie syntaxe trompeuse, c'est pas mal. On paie une construction d'initialisation plus une construction de recopie.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Perso, je me suis fait avoir par la syntaxe aussi... beaucoup confonde (suffit de parcourir un peu le forum pour s'en rendre compte)

    et c'est vrai que c'est un peu pénible... Mais bon, C++ a aussi été créé dans une optique pratique, et non théorique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonType MaVar2 = MaVar1;
    est plus lisible (car plus aéré) que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonType MaVra2(MaVar1);
    donc...

    Mais c'est vrai que c'est un peu pénible parfois
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

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

Discussions similaires

  1. [Formulaire] eviter une revalidation
    Par eleve36 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/10/2005, 11h29
  2. [DB2] Eviter une cascade infini dans un trigger
    Par Fatah93 dans le forum DB2
    Réponses: 2
    Dernier message: 25/04/2005, 14h23
  3. [langage] comprendre une syntaxe particulière
    Par mat21 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2004, 18h12
  4. Réponses: 2
    Dernier message: 21/06/2004, 15h55
  5. [RICHEDIT] -> Coloriser une syntaxe ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/01/2004, 12h57

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