Как перегрузить оператор для объединения строки с объектом класса? - PullRequest
0 голосов
/ 25 апреля 2020

Моя задача - присоединить строку к объекту класса. Я написал код - но он даже не компилируется, и он вряд ли работает правильно.

Если проще, например. Что мне нужно:

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;
}
...