![]() |
|
Модераторы: bsa |
![]()
|
|
| 4aineG |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
помогите пожалуйста проблема с перегрузкой операторов >> <<, возможно и с '-' и еще с конструктором без параметров наверно проблема
#pragma once #include <iostream> #include <string> #include <fstream> using namespace std; class Line { private: char *Line1; int length; public: Line() { Line1 [length] = '\0'; } Line(char* L1) { Line1 = new char[strlen(L1)]; strcpy(Line1, L1); length = strlen(Line1); } // friend ostream& operator << (ostream& out, Line& lin); // friend istream & operator >> (istream & in, Line &lin); // Line operator - (char letter); int CountWordsInLine() { int Count=0; for(int i=0; i<length; i++) { if (Line1[i]=='_') Count++; } Count++; return Count; } char* ReverseLine() { for (int i=0; i<=(length-1)/2; i++) { char temp = Line1[i]; Line1[i] = Line1[length-i-1]; Line1[length-i-1] = temp; } return Line1; } void Print() { cout << Line1 << endl; } Line operator - (char letter) { char *temp = new char[length]; for (int i=0; i<length; i++) { if (Line1[i]!= letter) temp[i] = Line1[i]; temp[i]='\0'; } strcpy(Line1, temp); for (int i=0; i<length; i++) delete [] temp; return Line1; } istream & operator >> (istream & in) { in >> Line1 >> endl; return in; } ostream& operator << (ostream& out) { out << Line1; return out; } }; #pragma once #include "Class.h" int main() { Line ln1("Hello_Russia"); cout << "normal sentece: "; Line ln2; cin >> ln2 >> endl; Line lin = ln2 - 'l'; cout << "without delete letters: " << lin; Line lnx1 = ln1.CountWordsInLine(); cout << "number of words: "; lnx1.Print(); Line lnx2 = ln1.ReverseLine(); cout << "reversed sentence: "; lnx2.Print(); return 0; } |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 2 Всего: 10 |
Пока то что скажу на вскидку посмотрев код.
В конструкторе по умолчанию не выделяется динамическая память поэтому куда вы нуль завершитель присваиваете неизвестно. либо присвойте
либо выделяйте память. Нет деструктора, память за вас очищать тоже никто не будет. Это сообщение отредактировал(а) cutwater - 10.8.2008, 19:56 |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 2 Всего: 10 |
В конструкторе с параметром вы совершаете 2 ошибки.
1) 2 раза используете ф-цию strlen, которая проверяет всю строку на наличие нульзавершителя и на больших строках злоупотребление скажется на производительности 2) strlen возвращает длину строки без учета нуль завершителя правильно так
Reverce line тоже не есть правильно, по идее нужно брать цикл до length / 2 в вашем случае и ни в коем случае нельзя возвращать указатель - поле класса. Ибо это нарушает инкапсуляцию.. и вообще проблема у вас в каждой второй строке. укажите конкретно что не так, тогда дальше будем смотреть. Это сообщение отредактировал(а) cutwater - 10.8.2008, 20:00 |
|||
|
||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
4aineG,
1.Перегруженные операции поместить в поток и взять из потока должны обьявляться как дружественные. 2.К чему тебе понадобилось fstream? 3.Ты не можешь написать такое in >> Line1 >> endl; это то же самое, что написать cin>>a>>endl; 4.если используешь strcpy(),strlen(), и т.д. , то это библиотека cstring, а не string 5.не правильно реализован operator- и т.д. вот поправил
P.S. используй кнопку КОД -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |