好吧我對運算符重載非常陌生,我必須在面向對象的程序中執行這個函數,但我絕對需要幫助。這裏有操作的指令:運算符+超載
的MyString的對象應包含打印 串
的MyString的對象應包含報告 長度的串的長度()方法的打印()方法
MyString對象應該包含一個默認構造函數,它將 初始字符串設置爲「Hello World」的值。
MyString對象應該包含一個替代構造函數,它允許設置字符串的初始值。
的MyString的對象應重載以下運算符:
括號運營商應該被重載來代替set和get你以前的分配的功能。請注意,兩個實例 應在違反字符串數組邊界時發出exit(1)。
賦值運算符(=)將把源字符串複製到目標字符串中。請注意,目的地的尺寸需要調整爲與源相同的 。
邏輯比較運算符(==),如果兩個字符串的大小和內容相同,則返回true。
否定的邏輯比較操作符(!=),它返回2.
加法運算符(+),其符連接使用兩個字符串
加法/分配新建分配FY運算符(+ =)的布爾非以下列方式:字符串1 + = String2的作爲字符串1 =字符串1 + String2的操作
兩者加(+)和賦值(=)運營商需要能夠級聯operati的附件。這意味着String3 = String1 + String2或String1 = String2 = String3應該可以工作。
這是我在.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);
}
**const MyString operator +(const MyString& one, const MyString& two)
{
MyString String1;
return String1;
}**
MyString& MyString::operator()(const int index, const char b)
{
if(String[index] == '\0')
{
exit(1);
}
else
{
String[index] = b;
}
}
MyString& MyString::operator=(const MyString& rhs)
{
Size = rhs.Size;
counter = rhs.counter;
delete [] String;
String = new char[Size];
for(int i = 0; i < counter+1 ; i++)
{
String[i] = rhs.String[i];
}
return *this;
}
bool MyString::operator==(const MyString& one)
{
if(one.Length() == two.Length())
{
for(int i = 0; i < one.Length()+1; i++)
{
if(one[i] == two[i])
return true;
}
}
else
return false;
}
MyString& MyString::operator()(const 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;
}
這是我在主文件代碼:
int main (int argc, char **argv)
{
MyString String1; //Test of default constructor. Use "Hello world"
MyString String2 ("Two strings are not equal"); //Test of alternate constructor
MyString String3 ("Two strings are equal");
MyString String4 (String1);
cout << "*************Test of values*************" << endl;
String1.Print();
String2.Print();
String3.Print();
cout << "*************Test of Length*************" << endl;
cout << String1.Length() << " ";
cout << String2.Length() << " ";
cout << String3.Length() << endl;
cout << "*************Test of Set*************" << endl;
String1 (0, 'J');
String1.Print();
cout << "*************Test of Copy*************" << endl;
String1.Print();
cout << endl;
String3.Print();
cout << endl;
String3.Copy (String1); //String1 should be copied into String3
String1.Print();
cout << endl;
String3.Print();
cout << endl;
cout << "*************Test of Get*************" << endl;
for (int i = 0; i < String1.Length(); i++) //The last character should exit the program
{
cout << String1 (i) << " ";
}
}
cout << endl;
if (String1 == String4)
{
String3.Print();
}
else
{
String4.Print();
}
if (String1 != String4)
{
String3.Print();
}
else
{
String4.Print();
}
String1 = String2 = String3;
String1.Print();
String2.Print();
String3.Print();
String1 = String2 + String3 + String4;
String1.Print();
String2 += String3;
String2.Print();
return 0;
}
的main.cpp的文件不能改變但另一個.cpp文件必須編譯並與該文件一起運行。
你和我在同一時間寫答案,但你的更好,並涵蓋了所有地雷覆蓋。現在刪除我的。謝謝。 +1 – thb 2012-04-28 15:51:38
我想連接兩個字符串,但我很困惑我該怎麼做,而實際上並沒有使用+。 – user1363061 2012-04-28 16:12:12
@ user1363061它真的取決於你的'MyString'類的細節。也許你可以提供更多的細節? – juanchopanza 2012-04-28 16:14:11