Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
1

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

23.09.2012, 01:52. Просмотров 412. Ответов 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
Ответы с готовыми решениями:

Перегрузка оператора ==
Я уже встречала подобный вопрос на этом форуме, но у меня всё равно что-то не получается Вот...

Перегрузка оператора ^
Здравствуйте! Необходимо перегрузить бинарный оператор ^ для транспонирования матрицы. Есть класс...

Перегрузка оператора +
Написал для перегрузки оператора + class BoolMatrix { private: int feet; public:...

Перегрузка оператора >
Добрый день! #include <stdio.h> #include <tchar.h> #include <iostream> template <typename...

Перегрузка оператора
Не могу разобратся с перегрузками, помогите пожалуйста ребята Дать определение перегрузке функции...

7
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:54  [ТС] 2
архив
0
Вложения
Тип файла: zip String.zip (275.1 Кб, 5 просмотров)
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
23.09.2012, 01:55 3
maxon887, нужно выделять память size + 1 для символа-ограничителя '\0'
1
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:56  [ТС] 4
так а почему она тогда, через раз работает???
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
23.09.2012, 01:57 5
maxon887, потому что это UB. Вы выходите за пределы массива. Может случится все что угодно.
1
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:58  [ТС] 6
да это правильно, дабавил, вылетает всё равно
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 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 / 7
Регистрация: 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

Перегрузка оператора []
Всем привет! Как можно перегрузить оператор так, чтобы к нему можно было обращаться так:...

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

Перегрузка оператора ==
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int ...


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

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

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