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 :

[POO] Structure et heritage


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut [POO] Structure et heritage
    Salut
    j'ai un petit souci pour comprendre le code suivant :
    que signifie X(int x) : x(x)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    struct X : public Item {
    	int x ;
     
    	X(int x) : x(x) {
    	}
    };
    Merci pour vos suggestions

  2. #2
    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
    C'est la liste d'initialisations. Il me semble que c'est dans la FAQ, sinon un peu de recherche devrait te donner des milliers d'explications.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    une liste d'initialisation ca veut dire que x = x j'ai du mal a comprendre et j'ai cherché mais avoir pil poil la meme declaration je peux continuer longtemps et le but c'est de comprendre comment ca marche et pas le resultat pour pouvoir le modifier

  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

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Par défaut
    Citation Envoyé par juls64
    ca veut dire que x = x
    mettre le même nom de variable a un paramètre et a un attribut de la classe, c'est pas une habitude à prendre.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    a la base c'est pas mon code mais je dois le reprendre et le faire evoluer malheureusement pas un commentaire et des trucs comme ca partout qui font que j'ai du mal à tout bien comprendre

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Par défaut
    ahlala, reprendre le code des autres, c'est jamais une partie de plaisir. je me souviens du jour ou j'ai failli avoir une crise cardiaque en tombant sur un switch/case de 5 ou 6 écrans, avec des labels et des gotos a l'intérieur. un grand moment de solitude...
    bon courage!

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Citation Envoyé par juls64
    Salut
    j'ai un petit souci pour comprendre le code suivant :
    que signifie X(int x) : x(x)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    struct X : public Item {
    	int x ;
     
    	X(int x) : x(x) {
    	}
    };
    Merci pour vos suggestions
    Pour répondre à ta question :
    signifie que X est le constructeur de ta classe X prenant un integer en paramètre et x(x) signifie que tu initialises ta variable membre x avec la valeur x passée en paramètre de ton constructeur.
    C'est l'"équivalent" de x=x sauf que x(x) signifie que tu initialises x avec le constructeur de recopie. Bon ici ça n'a aucun sens vu que ta variable membre est un littéral.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Citation Envoyé par PierroElMito
    mettre le même nom de variable a un paramètre et a un attribut de la classe, c'est pas une habitude à prendre.
    Oui, et je dirais même qu'appeler des variables x ou y ou test ... c'est pas fait pour la lisibilité de celui qui passe derrière

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Merci beaucoup ep31 pour ta reponse claire et precise j'avoue qu'a force de voir du code bizarre un peu partout je finis par ne plus pouvoir reflechir calmement

  11. #11
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Ma petite pierre à l'édifice:

    Typiquement, une classe ou une structure ont des membres de types (potentiellement) différents...

    Le but du constructeur n'est rien d'autre que d'initialiser toutes ces variables avec les valeurs qui lui ont été transmises pour, une fois que la mémoire a été allouée en suffisance.

    Pour les valeurs "litérales" (les types réellement de base), ainsi que l'a fait remarquer ep31, il n'est pas forcément intéressant de faire appel aux listes d'initialisations, mais pour tous ces membres qui sont, eux-meme, des type définis par l'utilisateur (struct ou class), c'est tout de suite différent...

    En effet, la première chose qui est faite lors de l'appel du constructeur (que ce soit par la déclaration d'une variable du type de ta structure, ou par l'appel à l'operateur new) c'est... d'appeler les constructeurs des membres

    Alors, imaginons un petit instant un constructeur du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    maclass::maclass(const type1& t1, const type2& t2, const type3& t3)
    {
        var1=t1;
        var2=t2;
        var3=t3;
    }
    et considérons, pour l'exemple, que type1, type2 et type3 soient des structures ou des classes que tu as créées toi meme, et que var1, var2 et var soient des membres de maclass du type concerné...

    Et là, les choses se corsent un tout petit peu...

    D'abord, il faut que tes types 1, 2, et 3 aient des "constructeurs par défaut" (des constructeurs qui peuvent etre considérés comme ne prenant aucun parametre, quittes à ce que les parametres aient tous une valeur par défaut )
    Et nous sommes donc face à deux solutions distinctes:
    • Soit, type1, type2 et type3 ont un constructeur par défaut (ou un constructeur qui est considérable comme tel) et, cela revient à dire
      Merci, tu m'a créé mes variables var1, var2 et var3 avec les valeurs par défaut, mais je voudrais maintenant que tu fournissent les valeurs de t1 à var1, celles de t2 à var2 et celles de t3 à var3 (ben ouaip, c'est ca le but des trois instructions du constructeur )...
      Le résultat direct, c'est qu'on va passer, au mieu par l'opérateur d'affectation, au pire on fera aussi un crochet, pour faire bonne mesure, par le constructeur par copie

      Comble de travail inutile, les valeurs par défaut des membres de var1, var2 et var3 seront redéfinies dans l'opérateur d'affectation, et, peut etre meme dans le constructeur par copie ... Bref, on fait deux à trois fois le meme travail
    • Soit, et, là, c'est le compilateur qui sera pas d'accord, tu n'as pas de constructeur qui puisse etre considéré comme le constructeur par défaut...
      Et, dans ce cas, la seule solution pour que le compilateur ne crie pas au scandale, c'est de fournir la liste d'initialisations qui lui permette d'appeler les constructeurs ad-hoc, et qui prendra la forme de
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      maclass::maclass(const type1& t1, const type2& t2, const type3& t3):
               var1(t1),var2(t2),var3(t3)
      {
      //plus rien à faire ici :D
      }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. [PHP 5.2] [POO] Structurer une classe
    Par comode dans le forum Langage
    Réponses: 6
    Dernier message: 31/07/2009, 00h50
  2. POO : difference entre heritage et polymorphisme
    Par Melvine dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 13/07/2009, 19h14
  3. [PHP 5.0] [POO] Structure
    Par Guigui13 dans le forum Langage
    Réponses: 7
    Dernier message: 11/07/2009, 15h29
  4. [POO] Structure de site : PHP et objet, la séparation
    Par Ministar dans le forum Langage
    Réponses: 1
    Dernier message: 23/01/2008, 09h58
  5. [POO] Modélisation d'héritage
    Par djflex68 dans le forum Diagrammes de Classes
    Réponses: 5
    Dernier message: 12/07/2006, 06h12

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