На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: JoeUser, Qraizer
  
> Посоветуйте хороший справочник по полям и методам основных классов C++, Желательно в PDF-формате и обязательно на русском языке
    Предыстория: написано довольно много программ в Borland C++ Builder.
    Надо: потихоньку начинать переносить весь этот код в стандартный C++, чтобы иметь кроссплатформенный код и не быть намертво привязанным к Выни.

    Интенсивно используются в основном классы работы с (текстовыми) файлами и с массивами строк.
    Из Builder программы переносятся в Qt, но лично я буду стараться обходиться средствами стандартного C++. Специфические объекты Qt буду использовать по-минимуму - главным образом для рисования графической морды лица у программ. Все невизуальные объекты - из классического C++.

    Для классического C я такую книжку нашел.
    Это С. Харбисон, Г. Стил "Язык C с примерами". Отличный справочник по стандартным возможностям и функциям классического C.
    Минус один - книга в формате DJVU, то есть контекстный поиск по содержимому книжки невозможен. Но и этот вариант еле-еле нашел из-за метлы "правообладателей".
    (Есть книга и в PDF-формате. Но там страницы pdf - просто сканированные картинки без текста. Контекстный поиск тоже невозможен).

    Теперь ищется нечто подобное для языка C++.
    Пока пользуюсь книгой Липпмана "C++ для начинающих". Несмотря на название, тут есть описание многих основных методов популярных классов.
    Пока эта книга выручает, тем более, что для нее есть нормальный PDF-вариант с возможностью контекстного поиска.

    Но может кто посоветует более подробный справочник без воды (или с минимумом воды)?
    P.S. Еще раз подчеркну - нужна книга на русском языке, так как "читать и переводить со словарем" нет времени.
      mkudritsky, дружище, самый первый совет - используя Qt, забудь про Си, полностью. Только С++.

      Далее запомни аксиомы:

      • Актуальной документации по Qt на русском - не было и нет! Пользуйся Google Translate & оригинальной документацией;
      • По STL книг, даже в электронном виде, валом - напиши в ПМ, скину из своего набора чёнить;
      • Жысть показывает, мы очень часто пользуемся строками и векторами - изучи QString и QVector в самом начале.
      Мои программные ништякиhttp://majestio.info
        http://ru.cppreference.com/

        Но перевод может быть неполным, неточным, корявым (машинным).
          Спасибо, что такие опытные участники форума не оставили без внимания мой пост.
          Попробую пояснить свои хотелки.
          1. Ядро программ собираюсь писать в чистом C++ без привлечения классов Qt.
          Делается это только с одной целью - переносимость ядра на разные платформы и на разные архитектуры: Windows, Linux... Даже на Android.
          В общем, ядро можно будет перенести на любую ОС, где есть компилятор классического C++.

          2. Графическую мишуру предполагается, конечно же, рисовать в Qt. В других ОС и в других архитектурах графика будет перенесена либо без изменений (если там есть Qt), либо отдельно дописываться другими средствам (если Qt нет).
          Переделка графики не так страшна, если ядро программы будет кроссплатформенным.

          Просто мы уже обожглись на Borland C++ Builder.
          Начиналось-то все очень бойко и перспективно на рубеже веков: помимо Win, Builder был и под Linux (могу ошибаться, но под Linux точно был Delphi-Pascal), а закончилось известно чем - проект давным-давно заброшен.

          P.S. Ну и в виде коллажа набросаю ряд проблем, с которыми сейчас приходится разбираться.
          Скрытый текст

          А. Работа с файлами.
          Например, в Билдере для проверки существования файла есть функция FileExists().
          А в C++ сейчас приходится явно вводить файловую переменную, пытаться открыть файл и т.п. - 3..4 строки кода. Громоздко и неудобно.
          Еще в Билдере имеется отличный класс: TStringList, где есть прекрасный метод SaveToFile. Увы, на C++ с классом list<string> приходится писать пятОк строк кода для аналогичного действия.
          Странно. Я думал, что C++ и создан для того, чтобы избавиться от такой рутины.

          Б. Преобразования строк в числа и наоборот.
          Например, в Билдере есть функции StrToInt, StrToFloat, IntToStr, IntToHEX (ксатати, очень удобно!) и т.д.
          Или у класса AnsiString есть методы ToFloat, ToInt.
          К сожалению, в C++ таких функций не нашел. Равно как и аналогичных методов у класса string

          Приходится пользоваться чисто C-шными функциями strtol, strtod
          А обратные преобразования - вообще жесть. Для замены IntToStr, IntToHEX, FloatToStr приходится писать отдельные функции на базе sprintf
          Ну и где здесь успехи чистого C++?! Ведь strtol, strtod, sprintf - это примеры функций чистого C.

          Примеры можно продолжать.
          Но я уверен, что попросту многого не знаю. Вот и ищу литературу, где все это подробно изложено.

          P.P.S. У нас в организации народ надо мной смеется - говорят, юзай классы Qt и будет тебе счастье!
          Но (следуя аналогии Borland C++ Builder) я их спрашиваю: "А вы уверены, что Qt будет жить через 10-15 лет? Лично я - не уверен! А вот то, что через 20 лет будут жить классические C/C++ - в этом я уверен".
          Сообщение отредактировано: mkudritsky -
            Библиотека чистого C, вообще-то, является частью библиотеки C++. Поэтому в C++ и не стали писать свою функцию для проверки существования файла. Насколько помню, Билдеровская FileExist просто вызывает нужную функцию C.
            А там подходящих функций целый набор: exist, access и, наконец, stat (на которую собственно первые две обычно и ссылаются).
            То же с функция преобразования чисел - зачем писать новую функцию, когда есть уже готовая? Кстати, StrTo..., ...ToStr тоже просто вызывали соответствующую функцию C.
            Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
              Цитата mkudritsky @
              А в C++ сейчас приходится явно вводить файловую переменную, пытаться открыть файл и т.п. - 3..4 строки кода. Громоздко и неудобно.

              Совершенно не важно, сколько там строк.
              Делай так же, как и они.
              Дописывай нужные функции/классы и размещай их в библиотеках.
              Скрытый текст

              Эта функция, скорее всего, не открывает файл.
              У Виндуса есть WINAPI вызов "GetFileAttributes".
              Нечто похожее у Линукс - "stat".
              Сообщение отредактировано: ЫукпШ -
              Подпись была выключена в связи с наложенным заземлением.
                mkudritsky

                Цитата mkudritsky @
                P.P.S. У нас в организации народ надо мной смеется - говорят, юзай классы Qt и будет тебе счастье!
                Но (следуя аналогии Borland C++ Builder) я их спрашиваю: "А вы уверены, что Qt будет жить через 10-15 лет? Лично я - не уверен! А вот то, что через 20 лет будут жить классические C/C++ - в этом я уверен".

                Builder живее всех живых и развивается 7-ми мильными шагами. Более того через пару лет он будет перспективнее чем Qt.

                Если бы в разных платформах были одинаковые функции то это бы была одна платформа.

                Поэтому если хотите переносимость, то нужно писать код под каждую платформу а после обобщать в новый класс. Это уже проделано в Qt. Правда большинство вещей не имеют аналогов и не может быть закодировано в абстракте классы.

                Так что удачного велосипеда строения.

                Во-вторых не надо всё делать на перёд. За это не платят. Надо заранее понимать какая вариотивность будет у вашей программы. И вот эту вариативность надо закладывать. Так как за вариативность приходится платить сроком и сложностью разработкой. Ибо каждый вариант требует изменений и требует тестирования и тд.


                Цитата mkudritsky @
                Приходится пользоваться чисто C-шными функциями strtol, strtod
                А обратные преобразования - вообще жесть. Для замены IntToStr, IntToHEX, FloatToStr приходится писать отдельные функции на базе sprintf
                Ну и где здесь успехи чистого C++?! Ведь strtol, strtod, sprintf - это примеры функций чистого C.

                Давным давно тут обсуждали альтернативы. Есть библиотеки/фремворки написанные на чистом Си++ для абстрагированная таких вот вещей.
                Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script Execution time: 0,0899 ]   [ 18 queries used ]   [ Generated: 25.09.18, 20:59 GMT ]