2017-02-19 6 views
0

オーバーロードされた演算子を突っ込んでいます。オーバーロードされた関数内から取り除くことはできません

私は何らかの理由で私のオーバーロードされた機能の中から出力を得られません。

C:MinGWの\ビン\> G ++ stringoverloading3.cpp

C:MinGWの\ \ binに> A.EXE私は私のコードを実行すると

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の\ビン>

何かaがあります勘定書を殺す大当たりオーバーロード?

+1

です。hmm – JoeBass

+4

この 'MyString b = a;'は代入ではなく(初期化です)、代入演算子は呼び出されません。あなたのC + +のテキストブックは、これを説明する必要があります。 –

+1

btwの配列とポインタがコード内のコメントと同じでないことを示します。 – user463035818

答えて

2

MyString b = a; 

は割り当てません。これは初期化です。コピーコンストラクタは、オブジェクトを初期化するために呼び出されます。代入演算子を呼び出すために、使用します。ために

MyString b; 
b = a; 

がそれを使用できるように、デフォルトのコンストラクタが最初に実装されなければなりません。私のオーバーロードが実際に呼び出されていない限り、

関連する問題