以下に示す演算子オーバーロード関数の両方で助けが必要です。私は実際に関数定義で代入を使わずにこれをどのように実装できるのか分かりません。オペレータのための+私の.cppファイル内複合代入と加算演算子のオーバーロード
コード:
String1 = String2 + String3 + String4;
String1.Print();
String2 += String3;
String2.Print();
:main.cppにから
MyString& MyString::operator+=(const MyString& rhs)
{
delete [] String;
String = new char[rhs.Size];
String = String + rhs.String;
return *this;
}
コール:
MyString& MyString::operator +(const MyString& rhs)
{
delete [] String;
String = new char[rhs.Size];
Size = rhs.Size;
// needs to be a loop for cascading +
// so that String1=String2+String3+String4 will work
for(int i = 0; i < rhs.Size+1 ; i++)
{
// String[i] + rhs.String[i]; ???
}
return *this;
}
コード+ = .cppファイルでオペレータのための
私の.cppファイルコードが間違っていることを知っていますが、いくつかの洞察は素晴らしいでしょう!
(実際に古いバッファを指していること)、古いものと新しいバッファを交換するサイズを更新し、
new_buffer
を解放することができますが、削除された場合文字列に追加しようとする前に、あなたは非常に遠くに行くことはありません... –実際に+と+ =が必要な場合は、文字列を追加しますか? –
2つの文字列(String1 = String2 + String3 + String4が動作する)を連結するには+演算子が必要ですが、String1 + String2を意味するString1 = String1 + String2を操作するには+ =が必要です。明確な例については – user1363061