Перегрузка оператора operator=

195
23 декабря 2017, 06:03

Мне нужно самой написать для класса String оператор operator=. Но он не правильно работает. Что я не правильно делаю?

String & String::operator=(const char other)
{
   delete[] mString;
   mSize = std::strlen(&other);
   mString = new char[mSize + 1];
   for (decltype(mSize) i = 0; i < mSize; ++i)
      mString[i] = other[&i];
   mString[mSize] = '\0';
   return *this;
}
Answer 1

Думаю, вы хотите это? К сожалению, сам класс вы не показываете, так что приходится гадать...

String& String::operator=(const char * other)
{
    delete[] mString;
    mSize = std::strlen(other);
    mString = new char[mSize + 1];
    strcpy(mString, other);
    return *this;
}

Для одного символа:

String& String::operator=(char other)
{
    delete[] mString;
    mSize = 1;
    mString = new char[mSize + 1];
    mString[0] = other; mString[1] = 0;
    return *this;
}
Answer 2

Если вдруг у вас реализованы конструктор из C-строки и большая тройка(а она должна быть реализована раз уж вы динамически выделяете память), то можно сделать так:

String & String::operator=(const char *other){
   *this = String(other);
   return *this;
}

UPD: Раз уж опечатки нет, и у вас уже есть operator=(const char*), то можно так:

String & String::operator=(const char c){
   char cstr[] = {c, 0};
   *this = cstr;
   return *this;
}
READ ALSO
Паттерн Builder в С++

Паттерн Builder в С++

Здравствуйте, на языке Java построил вот такой шаблон Builder:

227
Приведение void* к указателю на метод

Приведение void* к указателю на метод

Возникли трудности в процессе написания динамической библиотеки, содержащей реализацию методов классаБиблиотека подключается к главному...

205
Доступ из одного класса к полям другого

Доступ из одного класса к полям другого

ЗдравствуйтеПытаюсь реализовать примитивный tower defence

209
Способы создания обьектов класса С++

Способы создания обьектов класса С++

Сколькими способами можно создать обьект класса на С++ в ООП?

218