2017-02-19 1 views
0

Je cherche des opérateurs surchargés.Impossible d'utiliser la fonction surchargée à l'intérieur

Pour une raison quelconque, je ne reçois pas la sortie de cout de ma fonction surchargée.

class MyString { 

    public: 
     MyString(const char aString[20]){ 
      // copy the input string to "data" 
      for(int i = 0; i < 20; i++){ 
       data[i] = aString[i]; 
      } 
     } 

    public: 

     MyString operator=(const MyString copyFrom){ 
      MyString copyTo(""); 

      cout << "hi"; 

      for(int i = 0; i < 20; i++){ 
       copyTo.data[i] = copyFrom.data[i]; 
      } 

      return copyTo; 
     } 

    public: 
     char data[20]; // a pointer to memory 
}; 


int main() { 
    MyString a("hello"); 

    MyString b = a; 

    cout << b.data << endl; 

    return 0; 
} 

Quand je lance mon code, je reçois le résultat suivant:

C: \ MinGW \ bin> g ++ stringoverloading3.cpp

C: \ MinGW \ bin> a.exe bonjour

C: \ MinGW \ bin>

Est-il quelque chose une surcharge qui tue cout?

+1

à moins bien sûr que ma surcharge ne soit pas réellement appelée ... hmm – JoeBass

+4

Ce 'MyString b = a;' n'est pas une affectation (c'est une initialisation), et n'appelle donc pas l'opérateur d'affectation. Votre livre de texte C++ devrait expliquer cela. –

+1

btw tableaux et les pointeurs ne sont pas les mêmes que le commentaire dans le code suggère – user463035818

Répondre

2

La ligne

MyString b = a; 

est pas une cession. C'est l'initialisation. Le constructeur de copie est appelé pour initialiser l'objet. Pour appeler l'opérateur d'affectation, utilisez:

MyString b; 
b = a; 

Afin de pouvoir l'utiliser, le constructeur par défaut doit être mis en œuvre en premier.