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

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

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

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

19.10.2009, 20:11. Просмотров 1388. Ответов 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++ Не вызывается перегруженный оператор
Перегруженный оператор ввода C++
C++ перегруженный оператор <<
C++ Перегруженный оператор вывода
Перегруженный оператор присваивания C++
Функтор и перегруженный оператор C++
C++ Перегруженный оператор вывода
C++ Перегруженный оператор
Перегруженный постфиксный оператор ++ C++
Перегруженный оператор присваивания C++
Глобальный перегруженный оператор C++
C++ Не работает перегруженный оператор

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

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

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