2016-03-22 8 views
0

私はクラスのためのプログラムを持っていますが、私たちは演算子をオーバーロードしています。私は、挿入演算子以外には何の問題もありません。渡されるオブジェクトには文字が格納された文字配列があります。これらの文字は数値を表すASCII値で、ACSII値1は1を表します.2は2を表します。char配列を対応する文字に戻す必要があります。 = 49,2 = 50など)を使用して、配列内のすべての要素に「0」を追加します。オブジェクトが定数として渡されているため、配列の内容を変更できません。私の質問は次のとおりです。オーバーロードされた<<演算子関数は、定数でなければなりませんか?

オーバーロードされた挿入演算子関数に渡されるオブジェクトを定数として渡す必要がありますか?

私は、私たちの教授がこの配列でこの配列を変換することを希望していることはかなり肯定的です。以前はこのプログラム全体を書きましたが、挿入演算子と抽出演算子のオーバーロードではなくread()とwrite()関数を使用しました。読み込みと書き込みの関数で変換を行い、以前の割り当てで同じコードを使用していましたが、代わりにオーバーロードされた演算子を使用していました。以前の割り当てで配列内の数値を定数ではなかったため変換できました。コードは次のとおりです。

ostream & operator<< (ostream &Out, const MyFloat & x) 
{ 
    int Counter=0; 
    int PrintDigits=0; 

    //FIGURE OUT HOW TO CONVERT BACK IN THIS FUNCTION 

    for (int h=0; h<=MyFloat::MAXDIGIT-1; h++)//converts from number to character 
    { 
     x.Number[h] += '0';//ISSUE is here, can't change this b/c it's const 
    } 

    Out << "0."; 

    for (int i=x.MAXDIGIT-1; i>=0 && x.Number[i] == '0'; --i)//counting right to left, until we reach the first non-zero number, this is used to print out the correct amount of numbers, to keep from printing trailing 0s 
    { 
     ++Counter; 
    } 

    PrintDigits = 19 - Counter; 

    for (int j=0; j<=PrintDigits; ++j) 
    { 
     Out << x.Number[j]; 
    } 

    return Out; 
} 
+1

'operator <<'はRHSオペランドを変更してはいけません。したがって、const以外を渡す必要がある場合は、おそらく設計上の問題があります。 – juanchopanza

+0

簡単な答え:はいあなたはconstnessを削除することができます。しかし、あなたはしないでください。 –

+0

番号を変更せずに印刷する方法を見つける。 –

答えて

0

私はそれを理解しました。入ってくるconstオブジェクトを変更しようとするのではなく、ostream変数Outに格納されているように変換しました。

ostream & operator<< (ostream &Out, const MyFloat & x) 
{ 
    int Counter=0; 
    int PrintDigits=0; 

    Out << "0."; 

    if (x.NumberOfDigits != '0') 
    { 
     for (int i=x.MAXDIGIT-1; i>=0 && x.Number[i] == 0; --i)//counting right to left, until we reach the first non-zero number, this is used to print out the correct amount of numbers, to keep from printing trailing 0s 
     { 
      ++Counter; 
     } 

     PrintDigits = 19 - Counter; 

     for (int j=0; j<=PrintDigits; ++j) 
     { 
      Out << (int) x.Number[j]; 
     } 
    } 

    else 
     Out << "?"; 

    return Out; 
} 

私が言ったように、これは私の選択ではなく、割り当てが私に求めているものです。

関連する問題