Я хотел бы создать класс 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?