Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Первые опыты в C++, анализ кода  
:(
    Опции темы
tatan
Дата 6.11.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 31.10.2007

Репутация: нет
Всего: 1



Добрый день.

Я новичок в C++, работал с Delphi, на C не писал.

Читаю Либерти - Освой самостоятельно С++ за 21 день.
Решил попробовать для тренировки написать простой класс для работы с dbf.
Буду очень благодарен за замечания к моему коду: ошибки, неверные подходы,
скрытые угрозы, реализация чере ж..., таких косяков думаю здесь много.

Вообще, C++ понравился очень, возможности впечатляют, но иногда некоторые простые вещи
не понятно как делать, например работа с char.

Делалось все в Dev-C++ 4.9.9.2. Исходники присоединены. 
Заранее спасибо за любые комментарии.


Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  dbf.rar 4,33 Kb
PM MAIL   Вверх
Alek86
Дата 6.11.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



а может просто небольшой кусок кода или функцию выкинешь, что тебя смущает?
тока не огромное полотно, а кусок.

мне, к примеру, лень качать, запускать Dev-C++ 4.9.9.2....


--------------------
user posted image    user posted image
PM MAIL   Вверх
tatan
Дата 6.11.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 31.10.2007

Репутация: нет
Всего: 1



Поскольку мало что понимаю что хорошо-плохо хочется комментарий по всему коду, там немного, строк 200
компилиться и в TC++
PM MAIL   Вверх
GrayCardinal
Дата 6.11.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



Не разраривается  smile у меня линь  smile 

Это сообщение отредактировал(а) GrayCardinal - 6.11.2007, 16:44


--------------------
PM MAIL WWW   Вверх
tatan
Дата 6.11.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 31.10.2007

Репутация: нет
Всего: 1



Вот блин
Положил zip

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  dbf.zip 4,47 Kb
PM MAIL   Вверх
GrayCardinal
Дата 6.11.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



tatan, 
Так, на вскидку :
1. if не надо закрывать точкой с запятой.
2. Определение класса должно быть в хэйдере.
Код

  unsigned long RecCount() const {return itsTableHeader.NumOfRecords;};
    unsigned long RecNo() const {return itsCurRec;};
    short RecSize() const {return itsTableHeader.RecordLen;};
    bool Eof() const {return itsEof;};
    bool Bof() const {return itsBof;};
    unsigned long FCount() const {return itsFieldsInfo.size();};


Лучше сделать "inline" (в каждую строчку, в начало). И тоже последние ";" не нужны.
3. for тоже не надо ";" в конце.
4. Рекомендую { ставить в той же строчке, что и оператор.
5. Все переменные  должны быть в начале функции.
Вроде всё smile



--------------------
PM MAIL WWW   Вверх
JackYF
Дата 6.11.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(GrayCardinal @  6.11.2007,  16:44 Найти цитируемый пост)
у меня линь  smile

unrar есть smile

Цитата(GrayCardinal @  6.11.2007,  17:33 Найти цитируемый пост)
Все переменные  должны быть в начале функции.

С-стиль, весьма спорно.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
GrayCardinal
Дата 6.11.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



Код

 stringstream sss;
   sss<<"%"<<ll<<"."<<dd<<"f";
   char* d = (char*) malloc( strlen(sss.str().c_str()));
   strncpy(d, sss.str().c_str(), strlen(sss.str().c_str()));

Изварт чистейшей воды.
Проще так (на коленке):
Код

char ss[256];
sprintf (ss, "%%%d.%df", ll, dd);


Добавлено через 48 секунд
JackYF, 
Ничего спорного. Спросили как надо, я ответил  smile

Добавлено через 1 минуту и 15 секунд
JackYF, 
Унрар есть, я в курсе.


--------------------
PM MAIL WWW   Вверх
tatan
Дата 6.11.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 31.10.2007

Репутация: нет
Всего: 1



to GrayCardinal
 Все принято, большое спасибо
Ну кроме про "{", но это кажется к области религиозных войн smile)

с sprintf - о как, не придумал бы сам-то, согласен у меня изврат, я долго думал как записать строку формата
PM MAIL   Вверх
GrayCardinal
Дата 6.11.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



Далее. Указатели, перед тем как их удалять лучше проверять на NULL. И соответственно, после удаления присваивать NULL - для гарантии что не удалишь два раза один и тот же указатель.

Добавлено через 1 минуту и 3 секунды
tatan, 
Завсегда пожалуйста  smile 


--------------------
PM MAIL WWW   Вверх
tatan
Дата 6.11.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 31.10.2007

Репутация: нет
Всего: 1



Указатели кстати проверял
Но в предыдущей теме ктото сказал что проверка указателей на валидность почти ошибка в проектировании, все и убрал оставив на потом
PM MAIL   Вверх
GrayCardinal
Дата 6.11.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



tatan, 
Не читал тот флуд, но на нуль всегда проверяю. Так жить проще  smile 


--------------------
PM MAIL WWW   Вверх
tatan
Дата 6.11.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 31.10.2007

Репутация: нет
Всего: 1



Добавил в список рекомендаций - после удаления указателям присваивать NULL. "Так жить проще" (с) smile
PM MAIL   Вверх
archimed7592
Дата 6.11.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(GrayCardinal @  6.11.2007,  17:33 Найти цитируемый пост)
5. Все переменные  должны быть в начале функции.
Цитата(GrayCardinal @  6.11.2007,  17:39 Найти цитируемый пост)
Ничего спорного. Спросили как надо, я ответил  smile

А кто сказал, что так надо? smile


Цитата(GrayCardinal @  6.11.2007,  17:33 Найти цитируемый пост)
4. Рекомендую { ставить в той же строчке, что и оператор.

А я рекомендую так не делать smile.


Цитата(GrayCardinal @  6.11.2007,  17:39 Найти цитируемый пост)
Проще так (на коленке):

Ещё проще smile.
Код

sss<< setw(ll) << setprecision(dd) << num;


Добавлено через 48 секунд
Код

unsigned char dbfFldTypeChar = 'C';
unsigned char dbfFldTypeBool = 'L';
unsigned char dbfFldTypeNumeric = 'N';
...

Нужно:
Код

const unsigned char dbfFldTypeChar = 'C';
const unsigned char dbfFldTypeBool = 'L';
const unsigned char dbfFldTypeNumeric = 'N';



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
GrayCardinal
Дата 6.11.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



archimed7592, 
А передёргивать не надо  smile 


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.