我現在快要放棄了 - 頭痛和紅眼睛。你們中有些人可能會低估這個問題,但我別無選擇。我不懶惰,但沒有人可以交談。運算符重載 - 創建一個新的String類
它的所有關於在C++中創建我自己的String類,其中可以將字符串連接起來,將另一個字符串對象發送到字符串構造函數中,或者將字符串文字發送給構造函數。
程序應該輸出如下:
hello hello2
much hedache!!!
Enter a name:
hello John
相反的程序產生如下:
hello hello2
much hedache!!!
Enter a name:
much headache John
對於somereason字符串「大爲頭痛」被保存在對象 - 不用字符串和字符串3串聯替換。
string2 = "much hedache!!!";
而且我注意到,這是在我向對象的構造函數發送字符串對象時造成的。
String string2(string);
如果我現在這個更改爲以下:
String string2("hello2");
它的工作原理。
我不明白爲什麼,會很高興有人能回答這個問題。
#include <iostream>
using namespace std;
class String {
public:
char *string;
String(char *ch) {
string = new char[strlen(ch)];
int i = 0;
for(char *temp_ch_ptr = ch; *temp_ch_ptr; ++temp_ch_ptr) {
string[i] = *temp_ch_ptr;
i++;
}
}
String() {
string = new char[100];
}
String (String &string_obj) {
string = new char[strlen(string_obj.string)];
string = string_obj.string;
}
String operator=(char *ch) {
strcpy(string, ch);
return *this;
}
String operator+(String obj) {
String temp;
strcpy(temp.string, string);
strcat(temp.string, obj.string);
return temp;
}
};
ostream &operator<<(ostream &stream, String obj) {
stream << obj.string;
return stream;
}
istream &operator>>(istream &stream, String obj) {
cout << "Enter a name: ";
stream >> obj.string;
return stream;
}
int main() {
String string("hello ");
//String string2("hello2 ");
String string2(string);
cout << string << string2 << endl;
string2 = "much hedache!!!";
cout << string2 << endl;
String string3;
cin >> string3;
string2 = string + string3;
cout << string2 << endl;
return 0;
}
我不確定複製構造函數 - 問題可以在那裏嗎?
您需要跟蹤班級中實際的字符串長度!也相關:http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three –