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 :

compréhension du c++ - constructeurs et destructeurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par défaut
    salut

    on est au bout quasiment ds ce chapitre constructeurs et destructeurs

    La dernière occurence de (5, 5) correspond à la destruction résultant de l'opération demo c=a
    peut-être or a et c valent (1,0) donc rien à voir avec un (5,5)

    On peut remarquer d'ailleurs que la construction de cet objet n'apparait pas à l'écran.
    A ce moment là, on retrouve bien un ordre compréhensible.
    c vrai mais on a dit pour c=demo(5,5); on a la création d'un temporaire (constructeur I) puis il est recopié (operator=)puis le temporaire est détruit (destructeur) et là fin du main je retrouve destruction de (4,4) PUIS destruction du (5,5) OR c=dem(5,5) est LA DERNIERE OPERATION de la fonction principale mais (4,4) arrive à se détruire avant

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Par défaut
    JolyLoic vous a aussi donné une réponse similaire.

    Vous affectez a à c donc vous créez c à ce moment là.
    L'affectation d'une valeur constante à c ne change pas le fait que vous avez créé c dans l'instruction demo c=a; .

    Il y a toutes les réponses dans le fil.

  3. #3
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Bonjour,
    j'apporte mon grain de sel:
    [edit suite à remarques de Luc Hermitte]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void demo::Methode(const demo & d);
    Le problème n'est pas à quoi sert const dans cette déclaration, mais plus pourquoi une référence.

    Commençons par le début, en C++ (comme en C), les arguments de fonctions sont par défaut passés par valeur, en d'autre terme, même si on leur affecte une valeur dans la fonction, la valeur d'origine est conservée en sortie de fonction.

    Quand on utilise des pointeurs, on peut modifier la valeur des arguments définitivement.

    Cependant, hormis ce que certains considère comme lourd, l'écriture avec des pointeurs demande une précaution: Un test systématique de la valeur du pointeur à NULL avant son utilisation.

    Les références C++ pallient deux problème:

    On ne peut passer que des variables à un argument référence, pas de constantes littérales. Donc la zone mémoire est toujours valide (mais la valeur peut être indéfinie).

    Ainsi, avec une référence, on ne peut pas directement passer NULL.

    La référence permet le même comprtement qu'avec un pointeur, donc de modifier la valeur de l'argument, avec une syntaxe plus légère.

    Ici, il y a le mot clé const, donc l'argument ne peut pas être L-Value, c'est à dire à gauche d'une affectation. On est donc sûr que l'argument ne peut pas être modifié.

    Pourquoi la référence dans ce cas => Pour être sûr de ne pas se retrouver avec un objet NULL.

    Voilà.

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 305
    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 305
    Par défaut
    Pourquoi la référence dans un constructeur de recopie ?
    -> Pour pas qu'il se morde la queue ? Le passage par valeur qui entraine une copie ferait appel au constructeur de recopie qui réalise un passage par valeur et donc demande une recopie, qui appelle le constructeur de recopie , qui attend ...
    -> parce que les pointeurs en paramètres ne permettent d'ecrire "T a = b;" (a et b tous deux de même type).
    -> Le const pour pouvoir accepter des temporaires non nommés "T a = b + c;", "T a = T(42);" et des constantes (de même type) depuis lesquelles on doit pouvoir s'initialiser. C'est généralement cohérent avec le fait que l'on ne modifie pas l'élément avec lequel on s'initialise. (Parfois on ne peut pas avoir le const: voir p.ex. quand on veut une sémantique de déplacement comme avec std::auto_ptr<>)
    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...

  5. #5
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Pas frapper ! Pas frapper ! je suis gentil

    OK pour tes remarques Luc, j'ai pas suffisamment regarder la ligne que j'ai copié, mes remarques s'adressent à une méthode quelconque, bien sûr pas au constructeur par recopie

    Tient au passage, j'ai revu quelques trucs avecta remarque Luc

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/01/2010, 19h51
  2. Réponses: 9
    Dernier message: 13/11/2007, 14h46
  3. Réponses: 2
    Dernier message: 18/04/2007, 14h34
  4. Réponses: 18
    Dernier message: 08/12/2006, 03h30
  5. Réponses: 4
    Dernier message: 21/09/2006, 13h45

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