Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
#1

Перегрузка оператора += - C++

23.09.2012, 01:52. Просмотров 379. Ответов 7
Метки нет (Все метки)

реализую класс собственных строк называеться MyString
вылетает при использовании оператора +=
самое интересное что если дебажишь код по шагам всё проходит успешно
сама реализация оператора:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MyString& MyString::operator +=(MyString &s)
{
    if(!s.empty())
    {
    size+=s.Size();
    char temp[size];
    if(str)
    {
        strcpy(temp,str);
    }
    strcat(temp,s.str);
    //delete[] str;
    str=new char[size];
    strcpy(str,temp);
    return *this;
    }
    else return *this;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 01:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора += (C++):

Перегрузка оператора ^ - C++
Здравствуйте! Необходимо перегрузить бинарный оператор ^ для транспонирования матрицы. Есть класс матрицы: template <class T> class...

Перегрузка оператора *= - C++
как для заданного класса point перегрузить оператор *= всеми возможными способами (член класса, друг класса)? P.S. оператор *= должен...

перегрузка оператора () - C++
Вопрос заключается в следующем: - Что собой представляет перегружаемый оператор()? - Как его перегрузить? ( обычные операторы тип ++ и...

Перегрузка оператора = - C++
Нужно перегрузить оператор так что бы в начале строки и в конце были квадратные скобки . Все почти работает только вот вывод на экран не...

Перегрузка оператора << - C++
Здравствуйте форумчане, помогите исправить ошибку. Вообщем есть класс с перегруженным оператором &lt;&lt; . Category.h class...

Перегрузка оператора += - C++
Создал класс дробь. Пытаюсь перегрузить оператор += (или -=, *=, /=) А компилятор выдаёт ошибку 'drob operator+=(drob&amp;)' must take...

7
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:54  [ТС] #2
архив
0
Вложения
Тип файла: zip String.zip (275.1 Кб, 5 просмотров)
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
23.09.2012, 01:55 #3
maxon887, нужно выделять память size + 1 для символа-ограничителя '\0'
1
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:56  [ТС] #4
так а почему она тогда, через раз работает???
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
23.09.2012, 01:57 #5
maxon887, потому что это UB. Вы выходите за пределы массива. Может случится все что угодно.
1
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:58  [ТС] #6
да это правильно, дабавил, вылетает всё равно
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
23.09.2012, 02:22 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MyString& MyString::operator +=(MyString &s)
{
    if ( !s.empty()) {
      size += s.Size();
      
      char *temp = str;
      
      str = new char [ size + 1 ];
      
      std::strcpy( str, temp );
      
      std::strcpy( str + ( size - s.size()), s.str );
 
      delete temp;
   }
   
   return *this;
}
1
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 02:58  [ТС] #8
сорри за поднятую тему))
проблема была в конструкторе по умолчанию))))
C++
1
2
3
4
5
MyString::MyString()
{
    size=0;
    str=0;
}
функции strcpy и strcat работают с (\0) строками
тоесть надо так
C++
1
2
3
4
5
[CPP]MyString::MyString()
{
    size=0;
    str="";
}
[/CPP]
0
23.09.2012, 02:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 02:58
Привет! Вот еще темы с ответами:

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора - C++
Доброго всем времени. пытаюсь написать свой класс надстройка на одномерный массив. У меня вот возникло затруднение с перегрузками...

Перегрузка оператора - C++
Здравствуйте, друзья. Помогите пожалуйста найти ошибку, вернее я знаю где, но пока не понимаю как её исправить: //Добавить в строковый...

Перегрузка оператора [] - C++
объясните в 3х словах для ламера в чем смысл перегрузки, конкретно оператора


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru