Моя задача - присоединить строку к объекту класса. Я написал код - но он даже не компилируется, и он вряд ли работает правильно.
Если проще, например. Что мне нужно:
int main() {
CString a ("first");
"second <-" + a;
a.Show ();
return 0;
}
Вывод:
second <- first
Функция, которую я написал (она должна быть дружественной по условию задачи):
friend CString operator +(char* str1, CString& str2) {
CString temp;
strcpy(temp.c, str1);
strcpy(temp.c, str2);
return temp;
}
Полный код:
#include <iostream>
using namespace std;
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;
}
int main() {
CString a ("first");
"second <-" + a;
a.Show ();
return 0;
}