Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Visual C++ 8.0 
:(
    Опции темы
Enjoy
Дата 4.2.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Ap0k @ 29.12.2005, 16:04)
Ходил уже......нету там =(

smile smile
Чего нету? Денег нету или книжки в магазине???
Когда я в последний раз был в книжном магазине в провинциальном городе, то там было как минимум 100(!!!) книжек по С++!!!

А если серьёзно, то лучший вариант для тебя - это выучить книгу Дейтелов по С++.

Удачи!
PM MAIL   Вверх
AlexPro
Дата 5.2.2006, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 3
Всего: 4



Цитата(Enjoy @ 4.2.2006, 19:52 Найти цитируемый пост)

Когда я в последний раз был в книжном магазине в провинциальном городе, то там было как минимум 100(!!!) книжек по С++!!!

smile Это что за провинциальный город? Новосибирск? Екатеринбург? У каждого разные понятия "провинциального города". Когда я был в последний раз в книжном магазине в провинциальном городе (в котором, собственно, и проживаю - между прочим, районный центр) , там было две книги по компьютерной тематике: "Компьютер для пользователя" и "Excel для полных идиотов". Так что только интернет меня и выручает - есть возможность заказать книги по почте.
PM MAIL   Вверх
secado
Дата 5.2.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Начну с самого неприятного, старые char функции не работают, в массе своей. Вообще. Говорю об этом со стопроцентной уверенностью, потому что не далее как 10 минут назад, прекратил расхлебывать char функции в библиотеке CRT (стандарт С++). В результате: если хотите
отсутствие проблем с строками в windows программах - используйте только wchar_t тип для строк (для не MFC-данных), для MFC-данных - только класс CString и никаких LPCTSTR, LPSTR, LPWSTR, PCSTR, XCHAR... и прочего бреда. У меня от LPCTSTR уже нервный тик появился, как только его вижу - сразу же заменяю, если константа на _T(" "), если переменная - на CString. И блин, работает! Далее, большая часть,
строчных функций (не только со строками, но и файловых) - переписана с защитой от переполнения буфера (к именам функций добавлены
_s), в основном список параметров только дополнился явным указанием длины буфера, вроде бы и все, но Visual Studio настойчиво рекомендует использовать именно их. И это еще не все, windows-программистам будет "приятно" узнать, что есть еще одна группа строчных функций: та, которая описана в StrSafe.h (это WinAPI функции) и которые тоже переопределяют, как более современные, старые char функции. Хух!
Почему я об этом рассказываю? Будучи студентом одного из ВУЗов по специальности программист, я столкнулся с отсутствием тотальности в очень многих книгах по программированию (на С++ в частности). Именно тотальности - т.е. описанию всех(!) возможностей, которые предоставляет тот или иной аспект языка. И поскольку ни в литературе ни в Internet, я не нашел ничего подобного, я решил сделать это сам.
Взял MSDN 2005 JAN, MSDN 2K5 release и начал его штудировать, каждую статью, и писать маленький тренировочный проект по каждой возможности. Все для достижения работающего (всегда!) кода. Узнал я конечно, очень много интересного. Например, в некоторых демонстрационных примерах в CRT библиотеке преднамеренно (я подчеркиваю, преднамеренно!!) оставлены переменные с именами new, template (я подозреваю, что Microsoft специально это делает для проверки тех, кто изучает MSDN).
Да, и напоследок. Вот список функций, которые подхватывает класс CString (не мучайтесь с template СString, CSimpleString, CStringT и т.д.).
// CString a;
// a.AllocSysString() функция распределения памяти для автоматизации объектов в COM и ATL
// a.Append(PCXSTR pszSrc) добавление строки к строке
// a.AppendChar(XCHAR ch) добавление символа к строке
// a.AppendFormat(UINT nFormatID,...) добавление форматированной строки из ресурсов к строке
// a.AppendFormat(PCXSTR pszFormat,...) добавление форматированной строки к строке
// a.AppendFormatV(PCXSTR pszFormat, va_list args) использует RTTI функции списка аргументов (не применять)
// a.CharToOemA();
// a.CheckImplicitLoad(const void *pv);
// a.CloneData(CStringData *pData);
// a.Collate(PCXSTR psz); следующие две функции сравнивают две строки с учетом специфики определенных языков
// a.CollateNoCase(PCXSTR psz); следующие две функции сравнивают две строки с учетом специфики определенных языков
// s.Compare(PCXSTR psz); сравенение строки с учетом регистра символов
// s.CompareNoCase(PCXSTR psz); сравнение строки без учета регистра символов
// a.Concatenate(&strResult,PCXSTR psz1, int nLength1,PCXSTR psz2, int nLength2); // ATL функция
// a.Construct(*pString);
// a.CopyChars(XCHAR *pchDest,XCHAR *pchSrx, int nChars); копирование символов из одного буфера в другой (копируются char объекты), сами буфера не должны перекрываться в памяти
// a.CopyCharsOverlapped(XCHAR *pchDest,XCHAR *pchSrx, int nChars); то же самое, но буфера могут частично перекрываться в памяти
// a.Delete(int iIndex, int nCount); удаление количества символов, начиная с индекса
// a.Empty(); очистка строки
// a.Find(XCHAR ch,int iStart); поиск символа, начиная с начала строки
// a.FindOneOf(PCXSTR pszCharSet) нахождение первого вхождения любого из символов, перечисленных в строке
// a.Fork(int nLength);
// s.Format(PCXSTR pszFormat,...); форматирование строки указанными командами форматирования (обычный вариант)
// s.Format(UINT nFormatID,...); то же самое форматирование, но строкой, находящийся в ресурсах
// s.FormatMessageV(PCXSTR pszFormat, va_list *pArgList); эти команды используют список аргументов из RTTI
// s.FormatMessageW(PCXSTR pszFormat,...); форматирование сообщения (команды форматирования указаны)
// s.FormatMessageW(UINT nFormatID,...); форматирование сообщения строкой из ресурсов
// s.FormatV(PCXSTR pszFormat, va_list args); эти команды используют список аргументов из RTTI
// a.FreeExtra(); освобождение предварительно распределенной памяти для строки, чей символ конца находится раньше чем длина строки
// a.GetAllocLength(); возврат размера выделенной памяти под объект строки
// a.GetAt(int iChar); извлечение сисвола указанного номера из строки, нумерация с 0
// a.GetBuffer(int nMinBufferLength); возврат строки типа char * (фиксация размера строки и преобразование к обычным строчным функциям)
// a.GetBufferSetLength(int nLength);
// a.GetData(); данная компонентная функция обращается к внутренним системным и private объектам внутри класса, вне его не применять
// a.GetEnvironmentVariableA(PCXSTR pszVar); установка для данного объекта имени зарегистрированной переменной в системе
// a.GetLength(); получение длины строки
// a.GetManager(); получение указателя на менеджер распределения памяти для ATL-объектов
// a.GetString(); возврат строки (его нужно употреблять вместо перегруженных операций
// a.Insert(int iIndex, XCHAR ch); вставка указанного символа после указанного номера символа в строке
// a.Insert(int iIndex, PCXSTR psz); вставка строки после указанного номера символа в строке
// a.IsEmpty(); проверка строка пустая или нет
// s.Left(int iCount); извлечение слева (с начала строки) указанное число символов
// a.LoadStringA(UINT nID); данная функция загружает строку из ресурсной таблицы
// a.LoadStringA(HINSTANCE hInstance, UINT nID);
// a.LoadStringA(HINSTANCE hInstance, UINT nID, WORD wLanguageID);
// a.LockBuffer(); функция блокировки доступа к строке
// a.MakeLower(); функции приведения к нижнему регистру
// a.MakeReverse(); функция смены регистра
// a.MakeUpper(); функция приведения к верхнему регистру
// s.Mid(int iFirst, int iCount); извлечение подстроки, начиная с номера символа и количество символов
// s.Mid(int iFirst); извлечение подстроки, начиная с номера символа и до конца
// a.OemToCharA();
// a.Preallocate(int nLength); резервирование памяти под размещение строки
// a.PrepareWrite(int nLength);
// a.PrepareWrite2(int nLength);
// a.Reallocate(int nLength); перераспределение нового объема памяти для уже существующей строки
// a.ReleaseBuffer(int nNewLength); преобразование строки из char * обратно в динамическую строку
// a.ReleaseBufferSetLength(int nNewLength); то же самое, но указывается длина строки, которая будет установлена (если она меньше значащих символов в строке, строка будет усечена, если больше - строка будет содержать пустые символы)
// a.Remove(XCHAR chRemove); удаление из строки всех вхлждений указанного символа
// a.Replace(XCHAR chOld, XCHAR chNew); замена всех вхождений одного символа на другой
// a.Replace(PCXSTR pszOld, PCXSTR pszNew); замена всех вхождений одной строки на другую
// a.ReverseFind(XCHAR ch); поиск указанного символа, начиная с конца строки
// a.Right(int iCount); извлечение справа (с конца строки) указанное число символов
// a.SetAt(int iChar,XCHAR ch); установка символа указанного номера в строке, нумерация с 0
// a.SetLength(int nLength); установка длины строки для ATL-объектов
// a.SetManager(TCHAR *pStringMgr); ATL функция - установка менеджера для распределения памяти объектам
// a.SetString(PCXSTR pszSrc); запись в значение переменной класса нового значения строки, рекомендуется вместо оператора присваивания
// a.SetString(PCXSTR pszSrc, int nLength); запись значения строки вместе с указанием длины, используется для переменных с неизвестной длиной строки (для обрезки до нужного размера)
// a.SetSysString(BSTR *pbstr); размещение и установки строки для OLE объектов
// a.StringLength(char *psz); получение длины для оюъектов ATL-строки простых символов (или указанного типа?) без конечного 0
// a.StringLength(wchar_t *psz);
// a.SpanExcluding(PCXSTR pszCharSet); извлечение только тех символов из строки, которые перечислены во второй
// a.SpanIncluding(PCXSTR pszCharSet); извлечение всех символов из строки, которые не перечислены во второй
// a.ThrowMemoryException(); возбуждение строчного исключения
// a.Tokenize(PCXSTR pszTokens, int &iStart); парсинг строки
// s.Trim(); во всей строке удаляются пробелы
// s.Trim(XCHAR chTarget); во всей строке удаляется указанный символ
// s.Trim(PCXSTR pszTargets); во всей строке удаляются символы, перечисленные в строке
// s.TrimLeft(); то же самое, но только слева (с начала строки)
// s.TrimLeft(XCHAR chTarget);
// s.TrimLeft(PCXSTR pszTargets);
// s.TrimRight(); то же самое, но только справа (с конца строки)
// s.TrimRight(XCHAR chTarget);
// s.TrimRight(PCXSTR pszTargets);
// a.Truncate(int nNewLength); усечение строки до заданной длины начиная с первого символа (индекс 0)
// a.UnlockBuffer(); разблокировка доступа к строке
//оставшиеся функции Бог его знает, что они обозначают
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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