Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

solowey
Статус: 6-й класс
Рейтинг: 109
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 93
∙ повысить рейтинг »
Хватов Сергей
Статус: Академик
Рейтинг: 71
∙ повысить рейтинг »

∙ С / С++

Номер выпуска:1926
Дата выхода:10.10.2017, 08:45
Администратор рассылки:Андрей Кузнецов aka Dr_Andrew (Старший модератор)
Подписчиков / экспертов:26 / 25
Вопросов / ответов:3 / 6

Консультация # 30707: Вопрос такой. Есть задание на лабу: написать класс mystring, перегрузить там операторы и т.д. В приложении - код класса. Вопрос такой. Как корректно, чтобы не придрались вернуть из класса объект? И вообще, к чему можно придраться в этом классе? Ну, точнее не придраться, а что можно сделать лучше?...
Консультация # 36102: Здравствуте уважаемые эксперты! Подскажите пожалуйста, как можно реализовать поиск в Memo....
Консультация # 179901: Добрый День, господа эксперты. Помогите пожалуйста написать такую программу на С++: Написать программу которая вернет максимальное (минимальное) из двух переменных. Переменные вводит пользователь. Заранее Вам благодарен....

Консультация # 30707:

Вопрос такой. Есть задание на лабу: написать класс mystring, перегрузить там операторы и т.д.
В приложении - код класса.
Вопрос такой. Как корректно, чтобы не придрались вернуть из класса объект?
И вообще, к чему можно придраться в этом классе? Ну, точнее не придраться, а что можно сделать лучше?

Дата отправки: 03.12.2005, 15:30
Вопрос задал: Константин
Всего ответов: 3
Страница онлайн-консультации »


Консультирует Бартунов Сергей Олегович:

Здравствуйте, Константин!
Логично возвращать ссылку на char в operator[], чтобы можно было писать string s; ... s[3] = \'A\';
Print лучше делать не на экран, а в поток.
Я бы добавил отладочные функции, например Dump и IsValid
Еще можно работать через аллокатор, если класс насчитан на динамическую работу. К тому же, в данном виде этот класс работает только с однобайтовыми символами, а было бы неплохо работать через шаблон с любыми char_traits

Консультировал: Бартунов Сергей Олегович
Дата отправки: 03.12.2005, 16:13
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует estiGi:

Здравствуйте, Константин!
1. добавить пустой конструктор или привести первый к значению по-умолчанию
string(const char * str = NULL);
2. переменную char data[255]; заменить на char * data и создавать ее динамически, в контрукторе принимать буфер как (const char * newdata), а не как (const char newdata [255]). Нельзя так ограничивать класс.
3. добавить виртуальный деструктор, соотв. в нем чиститься
virtual ~string ();
4. добавить Find (char *) - т.е. поиск не только символа, но и строки
5. функции типа GetLen сделать inline
6. из функции Value возвращать константную строку, или перегрузить ее двумя спосбобами
7. ИМХО, слишком много ненужных this
8. Print дейстивтельно смотриться слишком узкоспециализированно
9. в функциях сравнения посоветовал бы возвращать то, что возвращает strcmp, все таки люди привыкли что 0 означает равенство, или хорошо закоментировать эту фугкцию, если делаешь наоборот
10. Сделать класс одинаково работающим как с АНСИ, так и с ЮНИКОД - строками.
пс
сам код и алгоритмы не смотрел, нету времени, звини

Консультировал: estiGi
Дата отправки: 03.12.2005, 16:59
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Raptor1:

Здравствуйте, Константин!
А зачем тебе лучше, класс явно не для практического использования из-за малой длины строки, чтобы корректно вернуть объект нужно его корректно конструировать, чего в твоем случае не наблюдается. Тебе надо создать конструктор копий (пишу как будто он inline, т.е. в объявлении) и оператор присваивания.
string(const string& src )
{
strcpy(this->data, newdata);
length=strlen(this->data);
}
string& operator =(const string& src)
{
strcpy(this->data, newdata);
length=strlen(this->data);
return *this;
}
________________________________________________
возможно будет работать и без этого если добавить оператор
operator const char*() const
{
return data;
}
тогда будет корректно работать конструктор и оператор присваивания из char*
_____________________________________________________________
по коду:
1.
string::string(const char newdata[255])//constructor
надо заменить на
string::string(const char* newdata)
иначе при вызове придется постоянно использовать приведение
2.
this->data // зачем везде использовать this, у тебя почти нигде нет неоднозначности, по моему это просто захламляет код
3. Вообще код очень сырой и весьма далек от оптимального, например
for (int i = num, j = 0; i < this->length; i++, j++)
{
result[j] = this->data[i];
}
можно заменить одним оператором memcpy
4. В функции
string string::Right(int num)//gettin n chars from the end
ты пытаешься вернуть не то что надо
5. Зачем нужна функция Print, или эта строка предназначена только для DOS или консоли?
6. Во операторах +,+= отсутствует проверка на размер
______________________________________________________
Вообще написать толковую и удобную строку достаточно объемная работа, я этим занимался но понял, что совершенство недостижимо. В текущем состоянии в ней около 120 функций и 100 кб исходник, и много нереализованных усовершенствований. Если она тебе нужна для зачета, то доведи до ума то что уже есть, если для работы то попробуй использовать ее в 5-6 программах и сам поймешь чего в ней не хватает. Как минимум динамического выделения буфера. В качестве базы посмотри на реализацию CString в MFC, там есть чему поучиться.

Консультировал: Raptor1
Дата отправки: 03.12.2005, 23:21
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 36102:

Здравствуте уважаемые эксперты!
Подскажите пожалуйста, как можно реализовать поиск в Memo.

Дата отправки: 24.02.2006, 18:56
Вопрос задал: Евгений (jeni)
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Muad Dib:

Здравствуйте, Евгений (jeni)!
> Подскажите пожалуйста, как можно реализовать поиск в Memo.

Содержание Memo->Lines в строку и использовать search, если в Memo->Lines нет Search.

Либо же реализовать процедуру поиска самостоятельно - тогда Кнут тебе помощь.

Консультировал: Muad Dib
Дата отправки: 24.02.2006, 19:14
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Mamont0001:

Здравствуйте, Евгений (jeni)!

Borland C++ Builder 6.0

Смотреть вложение.

Приложение:

Консультировал: Mamont0001
Дата отправки: 24.02.2006, 19:56
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 179901:

Добрый День, господа эксперты. Помогите пожалуйста написать такую программу на С++:
Написать программу которая вернет максимальное (минимальное) из двух переменных. Переменные вводит пользователь.

Заранее Вам благодарен.

Дата отправки: 10.09.2010, 19:16
Вопрос задал: Уманский Денис
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Филимонов Алексей Викторович:

Здравствуйте, Уманский Денис!
int _tmain(int argc, _TCHAR* argv[])
{
char task[4];
float first,second;

printf("Max or Min\n");
gets(task);
printf("\nInput first:\n");
scanf_s("%f", &first);
printf("\nInput second:\n");
scanf_s("%f", &second);
printf("Answer:\n");
if(!strcmp(task,"Max"))
{
if(first>second)
{
printf("%.3f",first);
}
else if(second>first)
{
printf("%.3f",second);
}
else if(first == second)
{
printf("\nchisla ravny.");

}
}
else
{
if(first>second)
{
printf("%.3f",second);
}
else if(second>first)
{
printf("%.3f",first);
}
else if(first == second)
{
printf("\nchisla ravny.");
}
}
getch();

return 0;
}
Если будут вопросы по коду пиши)

Консультировал: Филимонов Алексей Викторович
Дата отправки: 11.09.2010, 00:17
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное