|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Основы C++ | Перегрузка operator+ для m_string |
|
Основы C++ | Перегрузка operator+ для m_string
|
Новый участник Сообщения: 15 |
Подскажите пожалуйста, почему функция не работает.
В привате 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 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить 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; }; 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|