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

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

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

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

19.10.2009, 20:11. Просмотров 1400. Ответов 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;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2009, 20:11     Перегруженный оператор сложения строк
Посмотрите здесь:

Глобальный перегруженный оператор - C++
Как организовать работу глобального перегруженного оператора &quot;-&quot;, который должен сравнивать 5 массивов(экземпляры класса). Помогите,...

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

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

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

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

Функции и перегруженный оператор - C++
Помогите реализовать на С++: 1.Определить пользовательский тип данных fraction (дробь), представляющий собой структуру из 2х полей:...

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

Не работает перегруженный оператор присваивания - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;Windows.h&gt; class OutOfBoundsException {}; class MyString { private: unsigned...

Что за перегруженный оператор char* ()? - C++
Вот синтаксис: operator char*(){ return ptr; Пример взят из книги Брайана Овереленда и к этому примру, в...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
19.10.2009, 21:31     Перегруженный оператор сложения строк #2
RazorQ,
1. cout не понимает как выводить VString.
2. Скачай учебник Лафоре "Объектно-ориентированное программирование на C++", и открой Главу 8. После ее прочтения, 95% всех вопросов отпадет.
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
19.10.2009, 21:35  [ТС]     Перегруженный оператор сложения строк #3
Monte-Cristo, так вот я перегрузил этот оператор. И теперь он все нормально выводит, но не складывает. За книжку спасибо, сейчас почищу.
Ответ Создать тему
Опции темы

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