我的任务是将字符串附加到类对象。我编写了代码——但它甚至没有编译,而且几乎不能正常工作。
简而言之,这就是我想做的事情:
int main() {
CString a ("первый");
a = "Это " + a;
a.Show ();
return 0;
}
结论:
Это первый
我写的函数但它不起作用(它应该是有条件的):
friend CString operator +(char* str1, CString& str2) {
CString temp;
strcpy(temp.c, str1);
strcpy(temp.c, str2);
return temp;
}
如何解决问题?不能理解。
类本身:
class CString {
private:
char* c;
int length;
CString(int leng, char* payload) { // приватный конструктор, для перегрузки конкатенации
length = leng;
c = payload;
}
public:
CString() {
length = 0;
c = new char[1];
*c = 0;
}
CString(const char* s) {
length = strlen(s);
c = new char[length + 1];
for (int i = 0; i < length; i++) { c[i] = s[i]; }
c[length] = '\0';
}
~CString() {
delete[] c;
}
CString operator +(const CString& b) {
int newlength = length + b.length;
char* newstr = new char[newlength + 1];
strcpy(newstr, c);
strcpy(newstr + length, b.c);
return CString(newlength, newstr);
}
CString operator+(char* str) {
CString temp;
strcpy(temp.c, c);
strcat(temp.c, c);
return temp;
}
void Show(void) { cout << c << endl; }
CString& operator =(const CString& obj) {
delete[] c;
length = obj.length;
c = new char[length + 1];
for (int i = 0; i <= length; i++) { c[i] = obj.c[i]; }
return *this;
}
CString operator =(char* str) {
CString temp;
strcpy(c, str);
strcpy(temp.c, c);
return temp;
}
friend CString operator +(char* str1, CString& str2);
};
friend CString operator +(char* str1, CString& str2) {
CString temp;
strcpy(temp.c, str1);
strcpy(temp.c, str2);
return temp;
}
我没有很仔细地查看代码,但它应该在你的类中像这样工作:
在这种情况下,函数不必是友好的。