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 :

Copie instance d'une class avec changement d'attribut


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    D�veloppeur C# - SQL
    Inscrit en
    Octobre 2011
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur C# - SQL
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Par d�faut Copie instance d'une class avec changement d'attribut
    Bonsoir � tous,

    Je voulais savoir par quel moyen peut-on en c++ copier une instance d'une classe en modifiant certains de ces attributs; je m'explique: j'ai une classe Chat et je veux via une m�thode Chat reproduction() copier une instance c1 en modifiant certains de ses attributs. Imaginons que mon chat a un attribut string couleur initialis� � "noir" et un attribut int vie initialis� � 7 et qu'en faisant Chat c2 = c1.reproduction(); cela me cr�e un nouveau chat c2 ayant une couleur grise mais qu'en m�me temps c1 perde 1 point de vie. J'ai essay� de d�cr�menter l'attribut force directement via le constructeur ou le constructeur de recopie sans succ�s car cela m'initialise le chat initial (c1) avec une force d�j� r�trograd�e avant reproduction (c1.force = 7) ce qui n'est conforme � ce qui est attendu, c'est � dire c1.force = 7.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public:
    	Chat (string nom = "Miaou", int force = 7, string couleur  = "noir")
    	: nom(nom),  force(force), couleur(couleur)
    	{
     
    	}
     
    	Chat (Chat const& c)
    	: nom(c.nom), force((c.force)), couleur(c.couleur)
    	{
    Merci pour votre aide.

    Bien cordialement,
    IT

  2. #2
    Membre confirm�
    Homme Profil pro
    D�veloppeur du dimanche
    Inscrit en
    F�vrier 2013
    Messages
    154
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur du dimanche

    Informations forums :
    Inscription : F�vrier 2013
    Messages : 154
    Par d�faut
    Quelque chose dans ce style l� ?

    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
    struct Chat
    {
        std::string         m_nom;
        int                 m_force;
        std::string         m_couleur;
     
        Chat () {};
        Chat (std::string nom, int force, std::string couleur) : m_nom(nom), m_force(force), m_couleur(couleur) {};
     
        Chat reproduction()
        {
            m_force--;
            return Chat(m_nom, m_force+1, m_couleur);
        }
    };
     
     
    int main()
    {
        Chat c1;
        c1.m_force = 7;
     
        Chat c2 = c1.reproduction();
     
        std::cout<<c1.m_force; // affiche 6
        std::cout<<c2.m_force; // affiche 7
     
        return 0;
    }

  3. #3
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 507
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 507
    Par d�faut
    Plus simple :
    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
    struct Chat
    {
        std::string         nom;
        int                 force;
        std::string         couleur;
     
        Chat (string nom = "Miaou", int force = 7, string couleur  = "noir") : nom(nom),  force(force), couleur(couleur) {};
     
        Chat (Chat const& c): nom(c.nom), force((c.force)), couleur(c.couleur)	{ }
     
        Chat reproduction()
        {
            return Chat(m_nom+"-"+m_nom, m_force, "gris");
            m_force--;
        }
    };

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    Chat reproduction()
        {
            return Chat(m_nom+"-"+m_nom, m_force, "gris");
            m_force--;
        }
    Le premier compilo venu t'annoncera un warning "code unreachable".
    Ton constructeur par copie est inutile, celui par d�faut aura le m�me comportement. En plus, si besoin d'un constructeur par copie, on aura aussi g�n�ralement besoin d'un op�rateur d'affectation, et souvent du destructeur.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 507
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 507
    Par d�faut
    Oups

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct Chat
    {
        std::string         nom;
        int                 force;
        std::string         couleur;
     
        Chat (string nom = "Miaou", int force = 7, string couleur  = "noir") : nom(nom),  force(force), couleur(couleur) {};
     
        Chat reproduction()
        {
            return Chat(nom+"-"+nom, force--, "gris");
        }
    };

  6. #6
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    La r�flexion � retenir, c'est que puisque tu ne veux pas faire une copie (au sens de duplicatat), il vaut mieux faire une fonction d�di�e.

    La m�thode propos�e par mes pr�d�cesseurs reproduit le concept de clonable, ou un objet n'est pas copiable, mais dispose d'une fonction clone().

  7. #7
    Membre averti
    Homme Profil pro
    D�veloppeur C# - SQL
    Inscrit en
    Octobre 2011
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur C# - SQL
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Par d�faut
    Citation Envoy� par MrPchoun Voir le message
    Quelque chose dans ce style l� ?

    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
    struct Chat
    {
        std::string         m_nom;
        int                 m_force;
        std::string         m_couleur;
     
        Chat () {};
        Chat (std::string nom, int force, std::string couleur) : m_nom(nom), m_force(force), m_couleur(couleur) {};
     
        Chat reproduction()
        {
            m_force--;
            return Chat(m_nom, m_force+1, m_couleur);
        }
    };
     
     
    int main()
    {
        Chat c1;
        c1.m_force = 7;
     
        Chat c2 = c1.reproduction();
     
        std::cout<<c1.m_force; // affiche 6
        std::cout<<c2.m_force; // affiche 7
     
        return 0;
    }
    Merci je l'ai traduite en classe Chat et cela fonctionne impeccablement.

    Cordialement,
    IT

  8. #8
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    m_force--;
            return Chat(m_nom, m_force+1, m_couleur);
    peut s'�crire tout simplement return Chat(m_nom, m_force--, m_couleur);, en connaissant comment fonctionne le post-op�rateur --/++
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  9. #9
    Membre Expert
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par d�faut
    @Bousk: petite b�vue: return Chat(m_nom, m_force--, m_couleur);

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 03/10/2012, 22h37
  2. R�ponses: 8
    Dernier message: 07/12/2009, 14h26
  3. R�ponses: 1
    Dernier message: 05/11/2009, 11h14
  4. Instance d'une classe avec une string
    Par beetlejuice722 dans le forum C#
    R�ponses: 30
    Dernier message: 31/10/2008, 10h43
  5. R�ponses: 2
    Dernier message: 26/10/2006, 10h13

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