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 :

Copy Constructeur


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut Copy Constructeur
    Bonjour a tous
    j'ai le code suivant
    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
     
    // A.h
    class A
    {  Protected:
         int  m_x1, m_x2;
       Public:
       A();
    };
     
    // A.C
    A::A():m_x1(0), m_x2(0)
    {}
    // B.h
    class B: public A
    {  privat:
        int  m_y1, m_y2;
        public:
         B();
         B(int x1, int x2,  const A & OrigA);
    };
     
    // B.C
      B::B(int x, int y, const A & OrigA): m_y1(x), m_y2(y)
    {
    }
    à partir de ce code j'aimerais a travers le copy constructeur initialiser les donner de B a l'aide des donnees de A parent de B. losrque je le fais ainsi ayant donné des valeurs à x1 et x2 au préalable , apres l'appell de B avec le contructeur j'ai la valeur 0 pour x1 et x2 a partir de B. J'aimerais bien savoir comment obtenir les valeurs de x1 et x2 de A à partir de B en utilisant le copy constructeur.
    Merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Si c'est possible, tu devrais créer un constructeur de A qui accepte les données de x1 et x2 et que tu appelles depuis le constructeur de B. Autre possibilité: tu assignes m_x1 et m_x2 directement depuis le corps du constructeur:

    Première possibilité:
    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
     
    // A.h
    class A
    {  Protected:
         int  m_x1, m_x2;
       Public:
       A();
       A(int x1,int x2);
    };
     
    // A.C
    A::A():m_x1(0), m_x2(0) {}
    A::A(int x1,int x2) : m_x1(x1), m_x2(x2) {}
    // B.h
    class B: public A
    {  privat:
        int  m_y1, m_y2;
        public:
         B();
         B(int x1, int x2,  const A & OrigA);
    };
     
    // B.C
      B::B(int x, int y, const A & OrigA): A(x,y) {}
    Seconde possibilité:
    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
     
    // A.h
    class A
    {  Protected:
         int  m_x1, m_x2;
       Public:
       A();
    };
     
    // A.C
    A::A():m_x1(0), m_x2(0)
    {}
    // B.h
    class B: public A
    {  privat:
        int  m_y1, m_y2;
        public:
         B();
         B(int x1, int x2,  const A & OrigA);
    };
     
    // B.C
      B::B(int x, int y, const A & OrigA)
    { 
      m_x1=x;
      m_x2=y;
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut
    merici pour la reponse, en fait peux etre je me suis mal fait comprendre ce que je voudrais faire est la suivante:
    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
     
    // A.h
    class A
    {  Protected:
         int  m_x1, m_x2;
       Public:
       A();
       A(int x1,int x2);
    };
     
    // A.C
    A::A():m_x1(0), m_x2(0) {}
    A::A(int x1,int x2) : m_x1(x1), m_x2(x2) {}
    // B.h
    class B: public A
    {  privat:
        int  m_y1, m_y2;
        public:
         B(const A & OrigA);  //  COPY CONSTRUCTEUR
    };
     
    // B.C
     
      B::B(int a, int b, const A & OrigA) :  m_y1(a), M_y2(b)
      {
          m_x1 =  OrigA.m_x1;
          m_x2 =  OrigA.m_x1;
      }
    Ainsi je voudrais utiliser les donnees d'une instance de A pour creer mon instance B,
    mais j'ai comme erreur m_x1 et m_x2 ne sont pas accessibles de B::B.....

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      B::B(int a, int b, const A & OrigA) : A(OrigA.m_x1,OrigA.m_x2), m_y1(a), M_y2(b)
      {
      }

    ou mieux si A dispose d'un constructeur par copie


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      B::B(int a, int b, const A & OrigA) : A(OrigA), m_y1(a), M_y2(b)
      {
      }

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut
    merci j'essaye pour voir ce que ca donne

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut
    j'obtient toujours les meme erreurs a savoir
    m_x1 is not accessible from
    B::B(....., const A&).
    m_x2 is not accessible from
    B::B(....., const A&).

  7. #7
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    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
     
    class A
    {
    protected:
    	int m_X1;
    	int m_X2;
    public:
    	A( const A &rA ) 
    	{ 
    		m_X1 = rA.m_X1; 
    		m_X2 = rA.m_X2;
    	}
    };
     
    class B : public A
    {
    private:
    	int m_Y1;
    	int m_Y2;
     
    public:
    	B( int y1, int y2, const A &rA ) : 
    	  m_Y1(y1),
    	  m_Y2(y2),
    	  A(rA)
    	{
    		cout << m_X1 << " " << m_X2 << " " << m_Y1 << " " << m_Y2 << endl;
    	}
    };
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	A gA( 1, 2 );
    	B gB( 3, 4, gA );
    	return 0;
    }
    Fonctionne très bien chez moi

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut
    Merci au Moderateur (bigboomshakala) et JulienDuSud ca fonctionne super bien comme je voulais.

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

Discussions similaires

  1. [résolu]les constructeurs de copie
    Par pouss dans le forum Langage
    Réponses: 9
    Dernier message: 28/06/2005, 10h57
  2. Réponses: 3
    Dernier message: 24/04/2005, 14h19
  3. [C++]Heritage et constructeur de copie
    Par matazz dans le forum C++
    Réponses: 2
    Dernier message: 25/03/2005, 12h31
  4. Constructeur de copie modifiant le paramètre ?
    Par Nicodemus dans le forum C++
    Réponses: 4
    Dernier message: 12/01/2005, 21h25
  5. Constructeur de copie et Template: Transtypage
    Par ikkyu_os dans le forum Langage
    Réponses: 9
    Dernier message: 26/12/2004, 22h29

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