Задать вопрос
Ответы пользователя по тегу C++
  • Какой подход к компиляции кода считается самым лучшим? Через дефайны, передаваемые в билдовый скрипт, создание нескольких бинарников и т.д.?

    Adamos
    @Adamos
    4. Вынос всех функций, зависящих от железа, в динамические библиотеки.
    При старте определяется железо и подключаются нужные либы.
    Особенно актуально, если железо включено не постоянно или может измениться по ходу работы.
    Ответ написан
    Комментировать
  • Как инициализировать массив массивов массивов?

    Adamos
    @Adamos
    Если накладные расходы некритичны - вложенный вектор.
    Если хочется оптимально - класс с двумя функциями set / get и конструктором, в который передаются размеры. Внутри хранятся размеры и плоский динамический массив, номер ячейки в котором элементарно вычисляется при каждом обращении.
    Ответ написан
  • Почему меняется выходное значение после нескольких запусков программы?

    Adamos
    @Adamos
    Задача "представить то, что в десятичной дроби находится после запятой, в виде целого числа" - вообще не математическая. Потому что дает чрезвычайно разные результаты на 1.1 и 1.1000000000001.
    Поэтому решать ее проще так же дебильно: например, вывести дробь в строку, найти в ней с одной стороны точку, а с другой - первую ненулевую цифру, а потом эту часть строки привести к целому.
    Ответ написан
    Комментировать
  • Почему в C++ нужно строить всю программу на ООП (длинный вопрос)?

    Adamos
    @Adamos
    Право, может быть, вы даже "Идеальный код" не читали?
    ООП - это уникальная возможность разделить код на уровни абстракции. Реализовать все скучное, но необходимое, внутри методов класса - и забыть о нем все, кроме его интерфейса. В результате программа пишется на более высоком уровне и читается на нем же. Детали требуется изучать только тогда, когда это действительно требуется.
    Километровые простыни функций, которые может вызвать кто попало где попало с неизвестно как подготовленными входными данными и столь же неизвестными ожиданиями на выходе - ну, это может нравиться... если у вас много свободного времени или вы полжизни изучали именно этот хаос.
    Ответ написан
    Комментировать
  • Как работает генератор случайных чисел?

    Adamos
    @Adamos
    На самом деле, случайные числа нужны для нескольких целей, и алгоритма, подходящего для всех, нет и быть не может.
    Для моделирования может быть важным нормальное распределение выпадающих чисел. Здесь и случайное число по формуле вполне прокатит.
    Для игровых целей может быть важна именно высокая случайность числа (то есть, грубо говоря, вероятность выпадения 00000000, 0101010101 и 11111111 одинакова и не зависит от предыдущих выпадений).
    Для безопасности обязательна невозможность выведения следующих чисел из предыдущих (или каких-то других условий).

    Ну, а в идеале случайные числа вообще не должны вычисляться - если есть качественный поставщик энтропии. Это либо уже упомянутый аппаратный генератор, либо просто какие-то данные, которые невозможно восстановить или проанализировать одновременно с работой алгоритма. Зависит от конкретной задачи и условий.
    Ответ написан
    Комментировать
  • Какими инструментами можно автоматически производить анализ C++ проекта на различные метрики сложности кода?

    Adamos
    @Adamos
    Не боитесь "капнуть на пятно чистым"? После такого рефакторинга, который вы планируете, код не станет намного лучше - это будет та же легаси-каша, но с заплатками рефакторинга, которые к тому же налеплены механически, без понимания того, что происходит в этом конкретном месте.
    Имхо, разбивка проекта на модули и чистка их в порядке "пахучести" более перспективна - вы хотя бы за часть кода сможете быть спокойны.
    А так - ну, найдете вы километровые функции. Ну, разобьете их на десять стометровок. Код от этого действительно улучшится? Имхо, без взгляда на функции с более высокого уровня рефакторинг - мартышкин труд.
    Ответ написан
    2 комментария
  • Как реализовать переход по якорям и линкам в QT?

    Adamos
    @Adamos
    Зачем высасывать из пальца, если можно посмотреть, как делали опытные товарищи?
    Например, GoldenDict - словарь на Qt с открытым кодом. Автору пришлось решать те же проблемы, и у него таки неплохо получилось. Просто посмотрите, как.
    Ответ написан
    1 комментарий
  • Какая разница между ClassName::m_Field и this->m_Field в нестатическом методе?

    Adamos
    @Adamos
    Для полей - разницы нет.
    Для методов - таким образом уточняется, метод какого именно класса вызывается. При наследовании, например, именно так метод родителя может быть вызван вместо переопределенного в наследнике.
    Ответ написан
    1 комментарий
  • Есть ли парсер для header файлов(С++)?

    Adamos
    @Adamos
    Оптимизирующий компилятор может превратить то, что расписано в этом заголовочном файле, в стопроцентную фикцию, не имеющую в программе вообще никакого представления. К чему вы собрались обращаться, если функция, например, развернута в inline и вообще не имеет точки вызова?
    Ответ написан
    6 комментариев
  • Как писать кроссплатформенные приложения на C++?

    Adamos
    @Adamos
    GTk - это не С++, это С.
    wxWidgets - легкие и сильно похожие на MFC / VCL, что когда-то было плюсом. Сам использую эту библиотеку для кроссплатформенной разработки, но вам сейчас, на распутье, советую все-таки Qt. А еще советую писать не под Виндой. Из тех же соображений, из которых в вебе не верстают изначально под Ослик. Принцип "работаем по стандартам, добавляем костыли для девиаций", а не наоборот.
    Ответ написан
    4 комментария
  • Переопределение чистых виртуальных функций в C++?

    Adamos
    @Adamos
    Если методы в дочерних классах различаются - значит, их не должно быть в родительском.
    Учите L в SOLID.
    Ответ написан
    Комментировать
  • Существуют ли правила проектирования интерфейса?

    Adamos
    @Adamos
    Если имеется в виду именно интерфейс, а не архитектура, то вам нужно заклинание "Human Interface Guidelines". Можно начать колдовать с Википедии.
    Ответ написан
    Комментировать
  • На каком языке легче обрабатывать фотографии(Java, Python, C++)?

    Adamos
    @Adamos
    А вы, простите, на этом языке собрались сами писать алгоритм перевода в ч/б битмап?
    Это сто лет в обед успешно делает открытый и кроссплатформенный ImageMagick, причем среди его выходных форматов, скорее всего, найдется что-нибудь легко перевариваемое на любом языке.
    Ответ написан
    Комментировать
  • C++ IDE для Линукса и компиляторы?

    Adamos
    @Adamos
    Есть ощущение, что в VS вы больше баловались Шарпом, чем Крестами.
    Потому что заявлять, что после Студии QtCreator "тяжеловат и сложен в настройке", а у CodeLite "перегруженный интерфейс" - это, как минимум, смело...

    Мне периодически приходится собирать и отлаживать виндовые порты программ в Студии. После лаконичной простоты QtCreator и его простого текстового .pro-файла вот это обычное для виндов "вместо настройки нужного - куча формочек и кнопочек, работающих неочевидным образом" - просто бесит, признаться. При всей моей флегматичности.
    Ну, и качество работы Intellisense в качестве базы для IDE иначе, как намеренным вредительством, я не могу объяснить. Просто сравнивая, насколько влет работала с С++ Студия до 2008 - и насколько все постоянно встает колом, начиная с 2010.

    В общем, хотите писать под Линукс - попробуйте просто привыкнуть к QtCreator.
    Даже если библиотека Qt вам совершенно не нужна, как мне.
    Ну, а если соскучились по простыням настроек и натужной задумчивости анализа, как в Студии - можете Eclipse или NetBeans попробовать, они и то, и другое успешно воплощают...
    Ответ написан
  • Можно ли инициализировать статический массив алгоритмом?

    Adamos
    @Adamos
    Напишите простенький скрипт, который создает .h-файл с объявлением и всеми данными этого массива. Делов-то.
    Аналогично в код подключается, например, графика в формате XPM.
    Ответ написан
  • Почему ссылка на указатель даёт не верный адрес?

    Adamos
    @Adamos
    А на кой, простите, ляд у вас в аргументах константная ссылка на указатель?
    Вот зачем именно здесь - константная ссылка?
    Имхо, вы сами себя запутываете.
    Передавайте указатель по значению - код упростится, и вы сами в нем разберетесь.
    Сейчас, видимо, вы умудряетесь вместо указателя получить адрес самой ссылки.
    Ответ написан
    2 комментария
  • Как в C++ скрыть определение вспомогательных типов?

    Adamos
    @Adamos
    class MyClass1 
    {
      MyStruct2 member; // компилятору необходимо полное описание структуры - она является частью класса (в частности, влияет на размер объекта в памяти)
      MyStruct2 *member; // компилятору не требуются подробности. Если этот член не используется вне класса - описание структуры спокойно может лежать только в cpp-файле этого класса, больше оно никому не понадобится.
      ... 
    }
    Ответ написан
    Комментировать
  • Как программно создать ярлык в MS VC++ 14.0 Windows 10?

    Adamos
    @Adamos
    Вообще-то в этом веке за создание программой файлов в той же папке, где находится программа, бьют по пальцам рельсой.
    Потому что даже до "подоконников" уже дошло, что папка, откуда что-то запускается, не должна быть доступна кому попало на запись.
    Программа по умолчанию должна иметь право создавать какие бы то ни было файлы только по пути %APPDATA%/(название этой программы)/.
    Ну, может спросить пользователя, куда он предпочитает этот файл сохранить.

    А валить файлы себе же под ноги - это каменный век IT, и именно это неумение и нежелание организовать безопасное пространство - причина того, что по Виндам табунами ходят вирусы.
    Ответ написан
    2 комментария
  • Как решить проблему с модальными окнами?

    Adamos
    @Adamos
    Например, так: в классе родительского окна заведите член - указатель на модальный диалог. В нем должен быть NULL по умолчанию и при закрытии диалогов.
    В методе обновления / отрисовки / idle (что там вы можете переопределить) проверяете, есть ли значение у этого члена. Если есть - посылаете ему ToTop или как оно там у Борланда называется.
    Примерно так.

    Можно еще поиграться с выставлением основному окну Enable(false) при открытии диалога, но это уже шаманство, и на другом компьютере поведение может отличаться.
    У вас проблема-то, скорее всего, из-за чудес оконного менеджера Восьмерочки-Десяточки, не разобравшегося, что диалог модальный и рассматривать его, как отдельное окно, не нужно.
    Ответ написан
    Комментировать
  • Как коротко и эффективно записать if конструкцию для множества условий?

    Adamos
    @Adamos
    Вам платят за экономию строчек?
    Как бы вы ни написали (хоть switch - case), в машинном коде все равно будут сравнения и ветвления.
    Так что не заморачивайтесь с запихиванием этого в итераторы, а постарайтесь записать так, чтобы читалось беглым взглядом - и невозможно было сделать опечатку, которая тем же первым взглядом не выявлялась бы.

    Кстати, компилятору тоже легче применять оптимизации, когда код пусть громоздок, но примитивен.
    Ответ написан