• Почему переопределение метода без virtual -- это не переопределение?

    @res2001
    Developer, ex-admin
    Переопределить можно в любом случае, хоть с virtual, хоть без.
    Но тут важно что вам надо от переопределенного метода. Если вам нужно использовать полиморфизм, то нужно ставить virttual, если нет - то нет.

    Например дополним ваш пример функцией:
    void func(struct A &a)
    {
      a.fn();
    }
    
    int main() {
      B b;
      b.fn();
      func(b);
    }

    И передадим туда ссылку на b. Будет напечатана А, т.к. методы fn не виртуальные.
    Если были бы виртуальные, то напечатается B - полиморфизм в действии.
    Ответ написан
    Комментировать
  • Как можно передать unsigned char[] PROGMEM в функцию?

    @res2001
    Developer, ex-admin
    void func(const unsigned char *array, size_t array_length);
    ...
    func(bfr, sizeof(bfr)/sizeof(bfr[0]));


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

    @res2001
    Developer, ex-admin
    В п.1 написана какая-то синтаксически не корректная хрень, смысла которой я понять не могу.

    Массив бит или битовое поле можно реализовать, конечно. Фактически это будет массив байт (или любого другого беззнакового целого), можно его спрятать в typedef и реализовать над ним несколько операций отдельными функциями.
    Например в С++ есть специализация std::vector<bool>, которая для экономии памяти использует внутри битовый массив, а не массив bool, как можно было бы подумать.

    Объявляете байт и работаете с отдельными битами с помощью битовых операций. Если есть необходимость в более широком битовом поле, то можно все унифицировать: при инициализации задаете размер битового поля, вычисляете по заданному размеру размер массива (можно использовать uint8_t, uint16_t, uint32_t или uint64_t - любой беззнаковый целочисленный тип оптимальной длинны), выделяете память для массива.
    Операции над битовым полем:
    1. создание/удаление
    2. установить/снять бит по номеру
    3. проверить установлен ли бит по номеру
    4. опционально вычисление количества установленных бит и/или проверка пустое ли битовое поле.

    Все это не трудно сделать. Можно даже заморочится и сделать на макросах универсальный вариант, где тип данных для массива будет выбираться в зависимости от размера битового поля. Не уверен, что это надо на самом деле, вполне достаточно использовать массив uint8_t для всех размеров битового поля.

    Объявить переменную размером в один бит (или размером не кратным 8 бит) нельзя, потому что в современных компьютерах минимально адресуемая единица памяти - 1 байт. Была бы 1 бит - можно было бы объявлять переменные размером в 1(2,3, 11, ...) бит. Это архитектурное ограничение компьютеров, а не языка программирования.
    Ответ написан
    2 комментария
  • Как использовать классы через интерфейсы?

    @res2001
    Developer, ex-admin
    А теперь развейте вашу мысль с классами MySQLBase и класс MSSQLBase.
    Вы хотите сделать универсальный адаптер, который будет работать с любой БД. Он принимает на вход ссылку на IBase и спокойно вызывает метод ConnectToBase, не заботясь о том, что там в реальности MySQLBase или MSSQLBase.
    Ответ написан
    Комментировать
  • Проблемы с синхронизацией времени на Windows 10, дело в системных настройках?

    @res2001
    Developer, ex-admin
    Программно время синхронизируется по протоколу NTP. В винду встроен NTP клиент (есть и NTP сервер, но это уже другая история). По умолчанию время синхронизируется с NTP серверами микрософт (у меня стоит по умолчанию time.windows.com). Провайдер не имеет отношения к времени на вашем компьютере.
    В интернете хватает бесплатных публичных NTP серверов. Вы можете выбрать любой, который находится ближе к вам географически и настроить винду на синхронизацию с ним. Начните с https://ntp.org

    Если батарейка на материнке сдохла, то при выключении компа дата/время будет сбрасываться в некое нулевое время (а не замедляться или ускорятся).

    Часовой пояс в винде должен быть настроен правильно, т.к. время отображается в соответствии с настроенным часовым поясом.
    Ответ написан
    Комментировать
  • Kак написать программу на C использующую Shell?

    @res2001
    Developer, ex-admin
    Ваша программа должна запросить пользователя название запускаемого исполняемого файла, запустить на выполнение этот файл, дождаться его завершения, повторить весь цикл.
    Основные функции ОС, которые выполняют нужный функционал тут же перечислены: fork, execv, wait. Есть и другие функции ОС, которые могут быть полезны.
    Ответ написан
    Комментировать
  • Что нужно исправить в кодее сортировки merge, чтобы она правильно работала?

    @res2001
    Developer, ex-admin
    Может быть потому, что массивы в С/С++ индексируются, начиная с нуля, следовательно последний элемент будет иметь индекс (n-1), т.е. 50. А вы передаете в merge_sort в качестве right значение 51. Так что у вас выход за пределы массива. Так же вы используете начальное значение для left = 1, таким образом вы не обрабатываете 0 элемент массива.

    Кроме того. Заверните ваш код в тег code (кнопка </> на панели инструментов) и верните все отступы - код не возможно читать.
    Ответ написан
    Комментировать
  • Как WSL 2 запускает приложения на физ. машине Windows? Как сделать это в VirtualBox или VMWare?

    @res2001
    Developer, ex-admin
    WSL2 - запускает свою гостевую ОС в виртуальной машине, но эта машина тесно интегрирована в с виндой хоста, так что многие моменты обычных гипервизоров скрыты. То что вы можете запустить виндовые исполняемые файлы из WSL, это заслуга интеграции с хостом. Такие программы исполняются хостовой виндой, а не гостевой ОС. Другие гипервизоры так не умеют - у них нет такой тесной интеграции с хостовой ОС.

    По настройке сети для WSL2: https://learn.microsoft.com/ru-ru/windows/wsl/netw...
    Все получается.

    Подключить физический диск в ВМ можно. Для virtualbox нписано тут: https://www.virtualbox.org/manual/ch09.html#rawdisk
    У vmware есть своя инструкция.

    Подключить к гипервизору физическую машину - нельзя. Можно "сконвертировать" физическую машину в виртуальную и запускать уже виртуальную. Вот, например, инструкция от virtualbox: https://www.virtualbox.org/wiki/Migrate_Windows
    Ответ написан
    Комментировать
  • Как сделать Bat файл для пинга вводимого хоста?

    @res2001
    Developer, ex-admin
    set /p name="Input the host name: "
    ping %name%

    Даже не знаю, что тут комментировать :-)
    Дополнительную информацию смотрите тут:
    set /?
    ping /?
    Ответ написан
    1 комментарий
  • Где изучать STL и Boost?

    @res2001
    Developer, ex-admin
    STL по сути часть языка, так что в любом учебнике по плюсам будут и основы STL.
    Boost - это такая расширенная версия STL, многие новшества перед тем как попасть в стандарт и соответственно в STL тестируются на Boost. Но в Boost содержится много того, чего нет в STL. У Boost своя хорошая документация, изучайте по ней и по примерам.
    Любые другие библиотеки изучаются по документации от разработчиков библиотеки. Если документации нет, бывает и такое, - по исходникам.
    Ответ написан
    Комментировать
  • Какой компьютер выбрать для программирования?

    @res2001
    Developer, ex-admin
    1. Как уже писали, для программирования много не надо. Но когда комп начинает тормозить в не подходящий момент - это не приятно.
    2. Ноутбук или стационарный ПК надо выбирать исходя из того как вы пользуетесь им. Если он все время на одном месте - то смысла в ноуте нет.
    3. Учтите, что стационарный выйдет дешевле при тех же характеристиках.

    Я недавно обновил свой ноут. У меня вопроса не стояло ноут или ПК, т.к. регулярно бываю на выезде, хотя основное время - дома на удаленке.
    Взял Lenovo Legion 5. Доволен как слон :-)
    У Леново есть еще хорошие варианты в рамках линеек ThinkPad T/P/X. В каждой линейке несколько моделей. Пишут, что thinkpadы сертифицируются для пентагона, так что там качество на высоте должно быть.

    Если все таки остановитесь на ноуте, обращайте внимание на то, что в некоторых моделях память распаяна на материнке и заменить (увеличить) ее практически не реально. Так же есть смысл смотреть на наличие дополнительного слота для SSD. Ну и наличие необходимых внешних интерфейсов то же может быть важным вопросом. Если подключаете внешние мониторы, то смотрите, чтоб были разъемы в нужном количестве и нужного типа.
    Обычно, можно купить ноут с небольшим SSD и количеством памяти и сразу проапгрейдить его, возможно будет дешевле, чем сразу покупать ноут с необходимым размером SSD и памяти. На процессоре экономить не стоит.
    На озоне сейчас есть наши продавцы, которые возят из китая. Доставка долгая - 1-1.5 месяца. Но сильно дешевле, чем брать там где "в наличии". Растаможка уже включена в стоимость. У продаванов из Китая растаможка, скорее всего, не включена, поэтому у них ценник будет еще ниже, но он, с большой вероятностью, не окончательный.
    Ответ написан
    1 комментарий
  • Как будет ходить трафик внутри сети?

    @res2001
    Developer, ex-admin
    Нет понятия "основной шлюз".
    Есть "шлюз по умолчанию" в настройках сети на ПК.
    Если шлюз по умолчанию на ПК микротик, то все пакеты пойдут через микротик, т.е. по варианту 1.
    Не силен в микротиках, но в общем случае можно настроить DHCP так, чтоб он отдавал адрес оптического роутера как шлюз по умолчанию (или настроить статически). Тогда будет работать вариант 2. В таком случае микротик в сети будет выполнять роль только DHCP сервера, если, конечно, у него нет другого функционала.
    Ответ написан
    Комментировать
  • Почему программы получают доступ к планировщику задач, регистру, автозапуску и службам?

    @res2001
    Developer, ex-admin
    Смотря какой доступ. Смотря из-под какой учетной записи запущена программа.
    Доступ к планировщику задач есть у всех, пользователь может создавать новые задачи, удалять старые и т.п.; доступ к реестру к пользовательской ветке есть у пользователя полный, к ветке HKLM - на чтение, к некоторым разделам доступ ограничен; автозапуск - это просто ветки реестра и каталог "Strtup" в меню пользователя, соответственно права доступа зависят от нахождения ветки/каталога - если это пользовательский реестр или меню, то доступ полный, если системный - на чтение; доступ к службам у обычного пользователя на чтение есть, на запись требуются админские права.
    Если есть доступ у пользователя, то есть доступ и у любых программ, запущенных под этим пользователем.
    Ответ написан
    Комментировать
  • Как открыть localhost для общей сети?

    @res2001
    Developer, ex-admin
    Как только ты дашь доступ из интернета к этому приложению по советам выше, приложение сразу же начнут ломать.
    Если приложение изначально не создавалось для работы в интернете, то скорее всего рано или поздно в нем найдут баг и сломают. А дальше может быть что угодно: внедрение шифровальщика/вымогатора, использование твоего компа в бот сети и т.п. не приятные вещи.

    Поэтому для приложений, предназначенных для использования в относительно безопасной локальной сети, стоит использовать ВПН, а не прямой доступ из интернета.
    Ответ написан
    3 комментария
  • Как в Windows, подключится сразу двумя пользователями к одному сетевому диску?

    @res2001
    Developer, ex-admin
    Надо "разлогиниться" и залогинится пользователем 2.
    Ответ написан
    3 комментария
  • Ввод текста с++?

    @res2001
    Developer, ex-admin
    Библиотека называется WinAPI.
    Видимо нужно найти нужное окно (по каким-то признакам) и начинать посылать туда сообщения о нажатии клавиш.

    Собственно к С++ эта задача особого отношения не имеет. Та же логика, видимо, была у вас и в питоне, только там все это уже было запрятано в готовую библиотеку. На плюсах может и есть такая готовая библиотека, но точно это не стандартная библиотека, надо искать что-то стороннее.
    Разных библиотек в исходниках и без на плюсах и Си очень много. Гуглите.
    Ответ написан
    Комментировать
  • Как вывести кириллицу в c++?

    @res2001
    Developer, ex-admin
    lololoshka_1991, Если совсем просто, то пиши исходники в кодировке cp866. Кодировка консоли по умолчанию как раз такая в русской винде. Но в этом случае и запускай программу руками из консоли, т.к. тот же MSVS может менять кодировку консоли при запуске программы из него.
    Так же кодировка консоли может меняться и командой в самой консоли. Например: chcp 1251
    В винде по умолчанию может быть 3 варианта кодировок с поддержкой кириллицы: cp866, cp1251, UTF8.

    Что бы сделать программу независимой от кодировки консоли, то придется заморочиться. Готового решения не встречал. По уму надо делать так: пишем исходники в UTF8, в программе узнаем кодировку консоли (WinAPI позволяет это делать), перед выводом весь текст перекодируем в кодировку консоли, после ввода весь ввод перекодируем в UTF8. Внутри программы работаем только с UTF8. Для хранения строк в программе использовать wchar_t, wstring и т.п. Функции перекодирования в WinAPI так же присутствуют.

    Кстати в плюсах есть метод std::basic_ios.imbue(), который позволяет задавать кодировку потока. Можно попробовать поиграть с этим. Но вообще менять кодировку консоли из программы - плохо, т.к. пользователь консольной программы может ждать ответ от запускаемой программы в конкретной кодировке. Это широко используется при написании батников и т.п. скриптов. Например большая часть виндовых команд корректно выводит текст не зависимо от того какая кодировка в консоли. Тот же dir, например.
    Ответ написан
    Комментировать
  • Как отправить байт(ы) в COM-порт?

    @res2001
    Developer, ex-admin
    Сохраните ваши командные байты в файлы в двоичном виде.
    Отправить файл в последовательный порт можно так:
    type file.dat >COM1
    Ответ написан
    1 комментарий
  • Как удалить все строки после 10й строки?

    @res2001
    Developer, ex-admin
    Есть специализированная команда head, с помощью которой можно вывести N первых строк файла:
    head -q -n 10 file.txt >file_new.txt
    rm file.txt
    mv file_new.txt file.txt
    Ответ написан
  • Обход Dom дерева как то относится к дискретной математике?

    @res2001
    Developer, ex-admin
    Изучайте, конечно. Прирост даст, но не в обходе ДОМ.
    ДОМ и так что-то из этого уже использует под капотом, вы этим пользуетесь, вызывая стандартные методы.
    Ответ написан
    Комментировать