Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Основы C++ | Перегрузка operator+ для m_string

Ответить
Настройки темы
Основы C++ | Перегрузка operator+ для m_string

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите пожалуйста, почему функция не работает.
В привате str описан как указатель на char. В конструкторе инициирован так: str = new char [mas_size]

Код: Выделить весь код
m_string m_string::operator+ (const m_string &sec) 
	{
	int count_sec, count_str;
	char *sum_str;

	count_sec = stlen(sec);
	while (str[count_str] != '\0') count_str++;
	sum_str = new char[count_str + count_sec + 2];
 
	for (int i = 0; i <= count_str; i++) sum_str[i] = str[i];
	for (int i = 0; i <= count_sec; i++) sum_str[count_str + 2 + i] = sec.str[i];
	sum_str[count_str + count_sec + 2] = '\0';
 
	return *sum_str;
	delete[] sum_str;
	};

Отправлено: 17:07, 09-08-2005

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
m_string m_string::operator+ (const m_string &sec) 
	{
	int count_sec, count_str;
	char *sum_str;

// WTF stlen(const m_string &)?
             count_sec = stlen(sec);
// где инициализируется count_str? C++ не инициализирует стандартные классы.
	while (str[count_str] != '\0') count_str++;
	sum_str = new char[count_str + count_sec + 2];
 
	for (int i = 0; i <= count_str; i++) sum_str[i] = str[i];
// что в строке? "string1" + 2 неизвестных буквы +  "string2"?
	for (int i = 0; i <= count_sec; i++) sum_str[count_str + 2 + i] = sec.str[i];
	sum_str[count_str + count_sec + 2] = '\0';
 
	return *sum_str;
// это никогда не запустится:
	delete[] sum_str;
	};
Вообще, советую использовать стандартные классы basic_string. Они очень хорошо написаны и эффективно работают. Ну если уж хочется поэкспериментировать, советую немного переписать:
Код: Выделить весь код
class m_string
{    
    char* data;
public:
    m_string(char* d=0) : data(d) {}    
    ~m_string() { delete[] data; }    // delete 0 не является ошибкой
    int size() const { return data ? strlen(data) : 0; }
...
friend m_string operator+(const m_string &, const m_string &) 
};

m_string operator+ (const m_string &a, const m_string &b) 
{
    char* tmp = new char[a.size() + b.size() + 1];             
    m_string result(tmp);
// теперь даже при исключении все освободится
    if (a.data)
    {
        for(char* aa=a.data; *aa; ++aa)
        {
            *tmp++ = *aa;
        }
    }

    if (b.data)
    {
        for(char* bb=b.data; *bb; ++bb)
        {
            *tmp++ = *bb;
        }
    }

    *tmp = char();
    return *result;
};

Отправлено: 13:41, 10-08-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Основы C++ | Перегрузка operator+ для m_string

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Перегрузка операторов 'operator []' ganselo Программирование и базы данных 3 29-03-2009 14:57
OperaTor Sharik987 Хочу все знать 5 04-12-2008 12:37
[решено] Основы C++ | Использование operator[int, ...] hasherfrog Программирование и базы данных 2 28-09-2006 15:20
Реестр. Основы Evita Хочу все знать 2 21-03-2006 14:09
С++ | конструктор и operator[] Skrip Программирование и базы данных 10 30-07-2005 19:03




 
Переход