Как перегрузить оператор + в c ++, чтобы иметь возможность whrite c_str = "smth" + c_str; - PullRequest
0 голосов
/ 28 января 2020

Я хотел бы создать класс CMyString. Представляет объект с массивом char. Мне нужно перегружать операторов, чтобы суммировать эти объекты. Вот этот класс

CMyString::CMyString()
{
    i_length = 0;
    n_string = new char[1];
    n_string[0] = '\0';
}

CMyString::CMyString(const char *cChar)
{
    i_length = iSourceLength(cChar);
    n_string = new char[i_length];

    for (int ii = 0; ii < i_length; ii++)
        n_string[ii] = cChar[ii];
}
CMyString::CMyString(const CMyString &pcOther)
{
    i_length = pcOther.i_length;
    n_string = new char[i_length];

    for (int ii = 0; ii < i_length; ii++)
        n_string[ii] = pcOther.n_string[ii];
}
void CMyString::vCopyFrom(const CMyString &pcOther)
{
    for (int ii = 0; ii < i_length; ii++)
        n_string[ii] = pcOther.n_string[ii];
}

bool CMyString::bResize(int newSize)
{
    if (newSize <= 0)
        return false;

    delete(this->n_string);

    this->n_string = new char[newSize];
    i_length = newSize;
    return true;
}
//bool CMyString::bResize(int newSize) 

int CMyString::iSourceLength(const char *cChar)
{
    int i_source_length = 0;

    while (cChar[i_source_length] != '\0')
        i_source_length++;

    return i_source_length;
}
//int CMyString::iSourceLength(const char *cChar)

CMyString& CMyString:: operator= (const CMyString& pcOther)
{
    if (this != &pcOther)  // guard against  a = a;  
    {
        delete[] n_string;              // release old memory & then allocate new memory 
        i_length = pcOther.i_length;
        n_string = new char[i_length];
        vCopyFrom(pcOther);
    }
    return *this;                  // return a reference to itself to allow a = b = c; 
}
//CMyString& CMyString:: operator= (const CMyString& pcOther)

void  CMyString:: operator= (const char *cChar)
{
    if (i_length != 0)
        delete[] n_string;

    i_length = iSourceLength(cChar);  // count the length of init value
    n_string = new char[i_length];    // allocate storage 

    for (int ii = 0; ii < i_length; ii++) // copy init value into storage
        n_string[ii] = cChar[ii];
}
//void  CMyString:: operator= (const char *cChar)

CMyString& CMyString:: operator+ (const CMyString& pcOther)
{
    CMyString *c_res = new CMyString;

    if (i_length == 0 && pcOther.i_length == 0)
    {
        c_res->i_length = 0;
        c_res->n_string = NULL;
    }

    c_res->i_length = i_length + pcOther.i_length;
    c_res->n_string = new char[c_res->i_length];
    int ii;

    for (ii = 0; ii < i_length; ii++)
        c_res->n_string[ii] = n_string[ii];

    for (int ij = 0; ij < pcOther.i_length; ij++, ii++)
        c_res->n_string[ii] = pcOther.n_string[ij];

    return *c_res;
}
CMyString::operator char*()
{
    return n_string;
}
//CMyString& CMyString:: operator+ (const CMyString& pcOther)

CMyString::operator char*() const
{
    return n_string;
}

Что я должен сделать, чтобы иметь возможность написать c_str = "smth" + c_str ?? Компилятор подчеркивает мне этот плюс. Ни один оператор "+" не соответствует этим операндам. Типы операндов: const char [4] и CMyString?

1 Ответ

0 голосов
/ 28 января 2020

Для получения дополнительной информации вы можете посетить этот веб-сайт .

class CMyString
{
private:
    string str;

public:
    CMyString(string _str) { str = _str; }

    friend CMyString operator+(string value, CMyString Str);
    string GetStr() {return str;};
};

CMyString operator+(string value, CMyString Str)
{
    return CMyString(value + Str.str);
}

int main()
{
    CMyString test("Test");

    test = "smth" + test;
    cout << test.GetStr();
    return 0;
}
...