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 :

Mot clé : pour initialisation et exceptions


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 29
    Points
    29
    Par défaut Mot clé : pour initialisation et exceptions
    Bonjour,

    Je vois souvent des codes où après un constructeur on utilise le mot clé ": " pour initialiser des objets et/ou appeler le constructeur de la classe mère. Pourquoi ne pas le faire directement dans le corps de la méthode?

    A quoi sert le mot clé throw() à la fin d'une méthode, je sais qu'en général c'est pour définir le type d'exceptions que la méthode à le droit de lancer, mais dans ce cas (rien entre les parenthèses) à quoi ca sert? Est ce pour dire qu'elle n'a le droit de lancer aucune exception?

    Merci beaucoup de votre aide

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par microhft Voir le message
    Je vois souvent des codes où après un constructeur on utilise le mot clé ": " pour initialiser des objets et/ou appeler le constructeur de la classe mère. Pourquoi ne pas le faire directement dans le corps de la méthode?
    Lorsqu'on arrive à l'intérieur du constructeur, les membres et les classes mères sont déjà construits. Les listes d'initialisation :
    • Permettent d'éviter un appel au constructeur par défaut suivi d'une initialisation (ce qui est une perte de temps) en construisant directement l'objet dans son état final.
    • Sont la seule méthode utilisable pour les membres const, les références et les objets sans constructeur par défaut.

    Citation Envoyé par microhft Voir le message
    A quoi sert le mot clé throw() à la fin d'une méthode, je sais qu'en général c'est pour définir le type d'exceptions que la méthode à le droit de lancer, mais dans ce cas (rien entre les parenthèses) à quoi ca sert? Est ce pour dire qu'elle n'a le droit de lancer aucune exception?
    Oui, ça signifie effectivement que la fonction ne lève pas d'exception.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 28
    Points : 29
    Points
    29
    Par défaut
    Ca m'amène à poser une autre question dont j'ai un peu honte:

    j'ai toujours cru qu'en c++ si on déclare un const ou une reference on est obligé de l'initialiser en même temps. Comment se fait-il que dans ce cas l'initialisation n'est faite que après la création?

    Merci

  4. #4
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Non, c'est pas exactement ca. Pour les références et les variables constantes il doit y avoir initialisation au moment de la définition, qui correspond à la déclaration si tu définies/déclares une variable dans un bloc d'instruction. Mais dans une classe, ce que tu mets entre class { et } ce sont les déclarations des membres (*), et pour les références membres ou les données membres constantes l'initialisation, qui est obligatoire, se produit dans la liste d'initialisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    struct A
    {
      const int i;
      const int& r;
      //Liste d'initialisation obligatoire, sauf si tu ne crées jamais de A
      A() : i(0), r(i) {}
      void foo(){}
      static const int j = 0;
    };
    (*) Il y a aussi certains cas où il peut y avoir définition du membre en même temps, c'est le cas des fonctions membres si l'on fourni le corps de la fonction (comme foo dans mon code) et des données membre statique d'un type intégrale constant (comme j), et peut-être quelques autres.

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par gl Voir le message
    Oui, ça signifie effectivement que la fonction ne lève pas d'exception.
    A noter que toutes ces spécifications d'exception sont désormais deprecated, il est conseillé de ne pas les utiliser.
    Pour dire qu'une fonction n'est pas sensée retourner d'exception, il existe un nouveau mot clef, nothrow, qui a un comportement légèrement différent, et qui n'est pas encore pris en compte par tous les compilateurs.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Liste des mots français pour application JAVA
    Par elitost dans le forum Général Java
    Réponses: 15
    Dernier message: 16/08/2010, 15h57
  2. Réponses: 8
    Dernier message: 30/11/2007, 14h15
  3. [VB.net] MsgBox pour toutes les exceptions
    Par collaud_vb dans le forum Windows Forms
    Réponses: 5
    Dernier message: 06/10/2006, 21h56
  4. [Débutant]Besoin d'aide pour gestion d'exceptions
    Par H1B4K dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2006, 10h01
  5. Réponses: 2
    Dernier message: 05/06/2004, 00h12

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