Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2012, 13:27   #1
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
Стрелка Сложение двух string методом перегрузки +

Доброго времени суток. Просидев пару часов над задачкой, понял, что ни черта у меня не выходит.
Задача-то, собственно сделана, но не так, как сказано в условии. Требуется перегрузить "+" для сложения двух строк, а я сделал обычное побитовое копирование одной в другую, что противоречит условию.
Огромная просьма, просмотреть мою задачу и исправить перегрузку "+".
Заранее спасибо.
Код:
/*Определить класс-строку. В класс включить два конструктора: 
для определения класса строки строкой символов
и путем копирования другой строки (объекта класса строки).
Определить операции над строками:
+     конкатенация двух строк;
++  преобразование символов строки в строчные (маленькие) символы.*/

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <vector>
#include <sstream>
#include <strstream>
#include <string>
#include <algorithm>
using namespace std;


class stroka
{
	string m_str;

public:

	stroka(const char* src) : m_str(src) {};
	stroka(const stroka& src) : m_str(src.m_str) {};

public:
	const stroka& operator++()
	{
		transform(m_str.begin(),m_str.end(),m_str.begin(),tolower);
		return *this;
	}

	const stroka& operator++(int)
	{
		return this->operator++();
	}

	friend ostream& operator<<(ostream& out,const stroka& str)
	{
		return out << str.m_str;
	}
//сложение строк без перегрузки + (Работает)
	/*void add(const stroka &second)
	{
		m_str += second.m_str;
	}
*/
	void print()
	{
		cout << m_str;
	}
//(Сложение строк с помощью перегрузки "+", не работает) 
//Вот тут-то меня и настигла неизвестность.
	friend stroka& operator+(const stroka& str1, const stroka& str2) 
	{
		stroka result(stroka& str1);
		result = strcat(str1.m_str, str2.m_str);
		return result;
	}

};
int main()
{
	char line[256];
	cout << "Enter line, 255 chars max!" << endl;
	cin.getline(line,255);
	stroka str(line);
	cout << "To lower (operator++) : " << (str++) << endl;
	char line2[256]; 
	cout << "Enter line, 255 chars max!" << endl;
	cin.getline(line2,255); 
	stroka str2(line2);
	str.add(str2); //(Сложение строк без +, работает)
	str= str+str2;//(Сложение строк с помощью перегрузки "+", не работает)
	cout << "str+str2 = ";
	str.print();
	return 0;
}
MyQwErTy вне форума Ответить с цитированием
Старый 16.10.2012, 14:27   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
stroka result(str1);
result.add(str2);
return result;
Somebody вне форума Ответить с цитированием
Старый 16.10.2012, 15:23   #3
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Somebody,
исправил код, но в процессе выполнения программы, когда мы уже складываем строки, вылетает вот такая ошибка:

R6010
-abort() has been called
MyQwErTy вне форума Ответить с цитированием
Старый 16.10.2012, 21:10   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

operator+ возвращает ссылку на локальный объект.
И с tolower могут быть проблемы: как минимум, такая функция есть и в <cctype>, и в <locale>.
Somebody вне форума Ответить с цитированием
Старый 16.10.2012, 22:25   #5
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Попробовал на другом компьютере запустить - все работает. Большое спасибо за помощь!
MyQwErTy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сложение двух запросов. tema654 Microsoft Office Access 2 09.01.2012 23:09
Сложение двух массивов. ATAMAN200 Общие вопросы C/C++ 1 21.11.2010 21:19
Сложение двух цифр Delphi MrMorozko Помощь студентам 5 27.10.2010 18:52
сложение двух чисел pif Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 18 15.02.2009 12:51
Сложение двух матриц Аркадий Помощь студентам 5 26.04.2008 15:22