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++/CLI Discussion :

Souci pour la réécriture en C++/CLI d'une classe avec operator et constructor par copie


Sujet :

C++/CLI

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 28
    Points
    28
    Par défaut Souci pour la réécriture en C++/CLI d'une classe avec operator et constructor par copie
    bonjour

    je transpose des classes écrites en borland C++ (du C++ en gros mais à la borland )..
    j'ai remarqué que le mot const ca posait des soucis; ai je raison ?

    avant j'avais :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    class CToto
    {
     
    public 
    CToto(){}
    CToto(const CToto& original)
    {
        m_Mat = original.GetMat();
    }
    private:
        AnsiString m_Mat;
     
    public:
    void SetMat(const AnsiString& Str)
    {
     
    m_Mat = Str;
     
    }
     
    const AnsiString& GetMat() const
    {
         return m_Mat;
    }
     
    operator const AnsiString& () const
    {
     
    return m_Mat;
     
    }
     
    CToto& operator =(const AnsiString& Mat)
    {
     
    m_Mat = Mat;
    return *this;
     
    }
     
    CToto& operator=(const CToto& original)
    {
    m_Mat = original.GetMat();
    return *this;
    }
    }
    Apres

    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
    37
    38
    39
    40
    41
    42
    43
    44
    	ref class CToto
    	{
    	public :
    		CToto(){};
    		CToto(CToto% original)
    		{
    		m_Mat = original.Mat;		
    		}
    
    
    CTor par copie de la FAQ 
    CToto::CToto(const CToto^ original) {m_Mat = original->Mat;} 
    ne compile pas ....
    
    
    	protected:
    		String^ m_Mat;
    
    	public:
    		property String^ Mat
    		{
    			String^ get() {return m_Mat;}
    			void set(String^ value){m_Mat = value;}
    		}
    
    est ce que j'ajoute le % pour coller à mon code d'avant ? 
    		operator String^% ()
    		{
    			return m_Mat;
    		}
    
    		CToto% operator =(String^% Mat)
    		{
    			m_Mat = Mat;
    			return *this;
    		}
    
    		CToto% operator =(CToto% original)
    		{
    			m_Mat = original.Mat;
    			return *this;
    		}
    	}

    je ne comprend pas que le CTor par copie ne compile pas comme indiqué dans la FAQ...pour lesoperator = ou autre, je n'ai pas trouvé de choses écrite la dessus... on se colle au natif en virant le const et en remplacant juste la référence par % ?

    merci de vos conseils avisés..

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Un "pointeur managé" ne peut pas être const: .Net est comme java et a banni le concept de constance.

    Mes remarques: Ne passe pas un "pointeur managé" par référence si ça n'est pas pour le modifier.

    Personnellement, je serais du genre à faire ceci:
    Code C++/CLI : 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
    37
    38
    39
    	ref class CToto
    	{
    	public :
    		CToto() {};
    		CToto(CToto^ original)
    		{
    			m_Mat = original->Mat;		
    		}
     
    	protected:
    		String^ m_Mat;
     
    	public:
    		property String^ Mat
    		{
    			String^ get() {return m_Mat;}
    			void set(String^ value){m_Mat = value;}
    		}
     
    		operator String^()
    		{
    			return m_Mat;
    		}
     
    		//Pour ça, je ne sais pas si c'est accepté, par contre:
    		//À ma connaissance, types référence et opérateur =
    		//ne font pas bon ménage...
    		CToto^ operator =(String^ Mat)
    		{
    			m_Mat = Mat;
    			return this;
    		}
     
    		CToto^ operator =(CToto^ original)
    		{
    			m_Mat = original->Mat;
    			return this;
    		}
    	}

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/11/2009, 09h21
  2. Besoin d'aide pour réaliser une classe avec du css
    Par Winjet dans le forum Mise en page CSS
    Réponses: 29
    Dernier message: 24/04/2009, 11h01
  3. Réponses: 3
    Dernier message: 04/01/2009, 18h24
  4. Réponses: 4
    Dernier message: 28/01/2008, 16h46
  5. Réponses: 5
    Dernier message: 26/05/2005, 15h40

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