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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
RazorQ
578 / 345 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
#1

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

19.10.2009, 20:11. Просмотров 1412. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегруженный оператор сложения строк (C++):

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

перегруженный оператор << - C++
подскажите как перегрузить оператор &lt;&lt; для класса как описать само перегружение friend ostream&amp; operator &lt;&lt; (ostream &amp;c, const...

Функтор и перегруженный оператор - C++
захотел понять многопоточность в новом стадарте с++11 - смотрю http://sergeyteplyakov.blogspot.ru/2012/05/c-11-faq.html#std-threads - вижу...

Не вызывается перегруженный оператор - C++
#include&lt;iostream&gt; using namespace std; struct dates { int num; int count; dates *back; dates *forward; }; class...

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

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

2
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
19.10.2009, 21:31 #2
RazorQ,
1. cout не понимает как выводить VString.
2. Скачай учебник Лафоре "Объектно-ориентированное программирование на C++", и открой Главу 8. После ее прочтения, 95% всех вопросов отпадет.
0
RazorQ
578 / 345 / 9
Регистрация: 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
Привет! Вот еще темы с ответами:

Не работает перегруженный оператор - C++
Привет, у меня есть класс такой: class Sterling { private: long pounds = 0; int shillings = 0; int pennys = 0; public:...

Перегруженный оператор вывода - C++
Есть базовый класс Точка и его наследник Круг. Как в Круге использовать operator&lt;&lt; для Точки? Надо вывести координаты центра круга ...

Перегруженный оператор ввода - C++
Всем привет, как правильно создать перегруженный оператор ввода для инициализации данных об обьекте к примеру class Planet{ ...

Перегруженный оператор присваивания - C++
Достаточно информации прочитал, что такое перегруж. оператор присваивания, но не до конца понимаю суть данного вопроса - &quot;в каком месте...


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

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

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