2012-04-21 12 views
0

私はオブジェクト指向プログラムでこのコピーコンストラクタを実行するのに助けが必要です。結果は、文字列1:Hello Worldを文字列2にコピーすることです。This is a test.Copyを使ってコピーコンストラクタを実行する最善の方法は?

String1.Print(); 
cout << endl; 
String2.Print(); 
cout << endl;  
String2.Copy(String1);  
String1.Print();  
cout << endl; 
String2.Print(); 
cout << endl; 
:私の main.cppファイルで

void MyString::Copy(MyString& one) 
{ 
    one = String; 
} 

:私の.cppファイル

void Copy(MyString& one); 

:私の.hファイル

出力

Hello World 
This is a test 
is a test 
This is a test 

それはする必要があります:

Hello World 
This is a test 
Hello World 
Hello World 

私が間違っているのものを私に説明してください?ここで

は私の全体の.cppファイルです:

MyString::MyString() 

{ 

char temp[] = "Hello World"; 

     int counter(0); 
     while(temp[counter] != '\0') { 
       counter++; 
     } 
     Size = counter; 
     String = new char [Size]; 
     for(int i=0; i < Size; i++) 
       String[i] = temp[i]; 

} 

MyString::MyString(char *message) 

{ 

     int counter(0); 

     while(message[counter] != '\0') { 

     counter++; 

    } 

     Size = counter; 

     String = new char [Size]; 


     for(int i=0; i < Size; i++) 

      String[i] = message[i]; 

} 

MyString::~MyString() 

{ 

     delete [] String; 

} 

int MyString::Length() 

{ 
       int counter(0); 

       while(String[counter] != '\0') 
      { 
        counter ++; 
      } 

       return (counter); 
} 

void MyString:: Set(int index, char b) 

{ 

     if(String[index] == '\0') 

      { 
        exit(0); 
      } 

     else 

     { 

        String[index] = b; 
      } 


} 

void MyString::Copy(MyString& one) 

{ 

     one = String; 


} 

char MyString:: Get(int i) 
{ 

      if(String[i] == '\0') 
      { 
        exit(1); 
      } 
      else 
      { 

        return String[i]; 

      } 
} 



void MyString::Print() 

{ 

     for(int i=0; i < Size; i++) 

      cout << String[i]; 

      cout << endl; 


} 
+1

'void MyString :: Copy'はメンバ関数であり、コピーコンストラクタではありません。コピーコンストラクタは 'MyString :: MyString(const MyString&other)'というシグネチャを持ち、戻り値の型はまったくなく、 'void'もありません。 – dasblinkenlight

+0

ここに私の教授の指示があります:MyStringオブジェクトには、あるオブジェクトを別のオブジェクトにコピーするCopy(...)メソッドが必要です。 – user964141

+0

@ user964141はい、コピーメソッドはコピーコンストラクタと同じものではありません。 – bames53

答えて

1

void Copy(MyString& one);は、コピーコンストラクタではありませんが、私はあなたが必要とするすべてのコピーを行う機能であると思います。 String2.Copy(String1)が似ていることを意味

void MyString::Copy(MyString& one) { 
    one = String; 
} 

これはおそらく、あなたのクラス、それが何であれ、内部ストレージをStringを取って、そしてそれをあなたに渡す文字列を割り当てている...

実装String1 = String2.Stringを実行しています。あなたの望む出力は、String1をString2にコピーしたいが、完全に間違った方向に向いていることを示しています。

さらに、この割り当てによって部分的なコピーが発生するという事実( "テストです")は、その割り当てが壊れていることを意味します。あなたはそれの実装を示していないので、どのように壊れているのかはわかりません。


コードには多くの問題があります。他の学生やTAと一緒に行くべきです。しかし、特定の問題については、あなたの出力は、あなたは3つのことを見なければならないことを示しています。最初のGoogleの '3のルール'。第2に、左側がMyStringオブジェクトで、右側がchar *のときに '='が意味するものを考えてみましょう。第3に、データの正確なコピー方法がわかったら、割り当て方向を逆にして(たとえば、*this = out.String)正しい方向にコピーします。

+0

あなたは絶対に正しいです。ここに私の全体のコードがあります: – user964141

+0

@ user964141上記の質問を編集してあなたのコードを追加することができます。 – bames53

+0

素晴らしい!私はそれを追加しました – user964141

関連する問題