Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
RazorQ
582 / 349 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
1

Перегруженный оператор сложения строк

19.10.2009, 20:11. Просмотров 1461. Ответов 2
Метки нет (Все метки)

Погрузился я с головой в ООП и напоролся на проблемы. Вообщем пишу я класс VString, само собой реализующий строку. В нем есть функция-друг
operator+
C++
1
2
3
4
5
6
VString operator+( const VString &str1, const char *str2 )
{
    VString tmp(str1);
    tmp += str2;
    return tmp;
}

которая производит конкатенцию двух строк. Все работает правильно (судя по немногочисленным тестам), но в этой ситуации происходит аварийный останов
C++
1
cout << str3 + " Hello world\n";
ошибка
Код
*** glibc detected *** /home/user/mylib/a.out: free(): invalid next size (fast): 0x0804c078 ***
Дальше дамп памяти. Я так понимаю, что во время сложения создается новый объект, а потом он удаляется. Что сделать?
З.Ы. если это поможет, то
VString::VString(const VString &init)
C++
1
2
3
4
5
6
7
8
9
10
11
12
// конструктор копий
VString::VString(const VString &init) : size(init.size)
{
    /*
     * не всегда правильно работает 
     */
    string = new char[size];
    ++countString;
    
    for(int i=0; i<size; i++)
        string[i] = init.string[i];
}

VString &VString::operator+=(const char *str1)
C++
1
2
3
4
5
6
VString &VString::operator+=(const char *str1)
 {
     strcat(string, str1);
     size = strlen(string);
     return *this;
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2009, 20:11
Ответы с готовыми решениями:

Перегруженный оператор
MathClass = Harry; Раньше я думал, что перегрузка - это предоставление...

перегруженный оператор <<
подскажите как перегрузить оператор &lt;&lt; для класса как описать само...

Функции и перегруженный оператор
Помогите реализовать на С++: 1.Определить пользовательский тип данных ...

Перегруженный оператор присваивания
Добрый вечер! Встретил пример в книге, где есть перегруженный оператор...

Функтор и перегруженный оператор
захотел понять многопоточность в новом стадарте с++11 - смотрю...

2
Monte-Cristo
2796 / 1382 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
19.10.2009, 21:31 2
RazorQ,
1. cout не понимает как выводить VString.
2. Скачай учебник Лафоре "Объектно-ориентированное программирование на C++", и открой Главу 8. После ее прочтения, 95% всех вопросов отпадет.
0
RazorQ
582 / 349 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
19.10.2009, 21:35  [ТС] 3
Monte-Cristo, так вот я перегрузил этот оператор. И теперь он все нормально выводит, но не складывает. За книжку спасибо, сейчас почищу.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2009, 21:35

Перегруженный оператор присваивания
Достаточно информации прочитал, что такое перегруж. оператор присваивания, но...

Перегруженный постфиксный оператор ++
Есть задание: Создать класс &quot;нота&quot;: название, октава, продолжительность...

Перегруженный оператор ввода
Всем привет, как правильно создать перегруженный оператор ввода для...


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

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

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