2017-02-19 88 views
0

Я трясусь от перегруженных операторов.Не могу отключиться из-за перегруженной функции

По какой-то причине я не получаю выход cout из моей перегруженной функции.

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; 
} 

Когда я запускаю мой код, я получаю следующий результат:

C: \ MinGW \ Bin> г ++ stringoverloading3.cpp

C: \ MinGW \ Bin> A.exe привет

C: \ MinGW \ Bin>

есть ли что-то bout перегрузка, которая убивает cout?

+1

, если, конечно, моя перегрузка на самом деле не вызвана ... hmm – JoeBass

+4

Это 'MyString b = a;' не является назначением (это инициализация), и поэтому не будет называть оператор присваивания. Ваш текст на C++ должен объяснить это. –

+1

btw массивы и указатели не совпадают с комментариями в коде. – user463035818

ответ

2

Линия

MyString b = a; 

не является назначение. Это инициализация. Конструктор копирования вызывается для инициализации объекта. Для вызова оператора присваивания, используйте:

MyString b; 
b = a; 

Для того, чтобы иметь возможность использовать этот конструктор по умолчанию должен быть реализован первым.