Ответы пользователя по тегу C++
  • Функциональное приведение типов?

    @res2001
    Developer, ex-admin
    В первом случае сначала приводится 1 к double явно, потом неявно 3 в double, т.к. первый аргумент операции дабл, а потом выполняется деление двух даблов.
    Во втором случае выполняется целочисленное деление с результатом 0, затем 0 приводится к даблу.
    Ответ написан
    Комментировать
  • Как вызывать MultiByteToWideChar?

    @res2001
    Developer, ex-admin
    Юникодные константы объявляйте так:
    wchar_t* c=L"фывапр";
    И выводить на консоль с помощью wprintf, как писал Владимир Мартьянов
    Ответ написан
    Комментировать
  • Указатели на память в стеке?

    @res2001
    Developer, ex-admin
    Почему при выводе, например
    std :: cout << cStr ;
    Выводится "string" , то есть значение, а не адрес значения как обычно с указателями ?

    Потому что в cout переопределена оператор << для типа char*, так чтобы выводилась именно строка, а не указатель. Чтоб вывести адрес преобразуйте указатель в int и выводите как целое число.
    Ответ написан
    Комментировать
  • Почему нельзя объявлять стековые объекты внешних классов для внутренних классов?

    @res2001
    Developer, ex-admin
    В самом начале сделайте объвление:
    class Outer;
    
    class Outer {
    private:
      class Inner {
        Outer _outer;
    ...

    Может быть поможет.
    Ответ написан
  • Как сделать объект или указатель базового класса, который может обращаться ко всем методам дочерних классов?

    @res2001
    Developer, ex-admin
    В wall сделайте виртуальный метод open с тривиальной реализацией (например retrurn 0;), который затем в door переопределите.
    При вызове виртуального метода по указателю/ссылке на базовый класс будет вызван метод соответствующего дочернего класса без танцев с бубном.
    Ответ написан
    Комментировать
  • Почему так происходит?

    @res2001
    Developer, ex-admin
    Потому что в консоли русской винды кодировка либо 866 либо 1251. А в программе у тебя используется Unicode. setlocal, судя по всему, действует только на вывод.
    Чтоб поточному объекту установить нужную кодировку надо вызвать его метод imbue.
    Смотри примеры:
    www.cplusplus.com/reference/ios/ios/imbue
    rsdn.ru/forum/cpp/4378529.all
    stackoverflow.com/questions/26387054/how-can-i-use...
    Ответ написан
    Комментировать
  • Как писать переносимую консольную программу?

    @res2001
    Developer, ex-admin
    Основной момент в переносимости - не использовать на прямую функций API ОС, все только через библиотечные вызовы.
    Консольную переносимую программу можно и без Qt написать - с использованием стандартной библиотеки.
    Ответ написан
    2 комментария
  • Упражнение из книги Страуструпа. Программа про зерна риса и шахматную доску. Как все таки выполнить задание корректно?

    @res2001
    Developer, ex-admin
    Зачем тебе double? В задаче же сказано - переменная типа int. А точнее unsigned int применительно к этой задаче.
    Кроме того вычислять степень в цикле - не интересно.
    Задачу можно решить используя битовую арифметику. Если учесть что каждый установленный бит в unsigned int - это 2 в некоторой степени равной позиции бита в числе. Нужно найти позицию самого старшего значащего бита в числе +1 - это и будет ответом на вопрос задачи.
    Ответ написан
  • Где смотреть конструктор класса?

    @res2001
    Developer, ex-admin
    Видимо как-то так:
    Wdiget *w = new Widget(Qt::Window | Qt::WindowTitleHint | Qt:WindowStaysOnTopHint);
    А вообще почитайте сначала что-нибудь по чистому С++ без примеси Qt. Там как раз про такие вещи пишут - где конструктор искать, как им пользоваться, как и для чего его писать, а так же много других интересных вещей.
    Купите книгу Страуструпа "Язык программирования С++".
    Ответ написан
    Комментировать
  • Найти медиану двух отсортированных массивов?

    @res2001
    Developer, ex-admin
    В таком объеме данных наверняка очень большое количество повторяющихся значений.
    Можно попробовать собрать некую статистику:
    значение - количество
    по каждому значению.
    Отсортировать и искать медиану по статистическим значениям.
    Объем, видимо, будет все равно большой, но уже не террабайты.
    Или, не собирать статистику, а двигаясь одновременно по обоим массивам считать количество значений. На каком элементе достигнете медианного положения - это значение и будет медианой.
    Если значения в массиве одной длины (например 32 битные целые), то исходя из общего объема массивов легко вычислить положение медианного элемента. Так же пользуясь тем, что массивы отсортированы можно довольно быстро находить количество каждого конкретного значения.
    Ответ написан
    Комментировать
  • Struct - что это?

    @res2001
    Developer, ex-admin
    Если я в классе до модификатора public укажу эти конструкторы, как ими пользоваться вообще?

    Этот прием используется для создания классов, которые могут создаваться только друзьями или статическими публичными методами класса, например для гарантирования создания только одного объекта класса (паттерн singleton). Обычно кроме конструкторов в private секцию помещают и деструктор, а так же делают friend или static метод для получения экземпляра класса и для его уничтожения.
    Кроме того конструктор и деструктор можно поместить в секцию protected класса - тогда экземпляры класса смогут создавать только потомки.
    Ответ написан
    Комментировать
  • Что значит использование внутриклассового инициализатора в конструкторе?

    @res2001
    Developer, ex-admin
    Может имеется ввиду список инициализации членов класса в конструкторе?
    class A { 
    int A,B;
    A() : A(0), B(0) {};
    ...
    }

    Если нет, то требуется больше информации. Вы то сами где это нашли? В каком контексте?
    Ответ написан
    Комментировать
  • Почему не получается полностью перегрузить оператор =?

    @res2001
    Developer, ex-admin
    В первом случае с ошибкой - у оператора присваивания другая сигнатура - там должна быть ссылка. В вашем случае как-то так:
    void operator=(const char *& cstr)
    Компилятор не находит подходящего оператора присваивания, отсюда ошибка.
    Во втором случае - вы сделали подходящий конструктор и компилятор им воспользовался. Но лучше этот конструктор определить как конструктор копирования:
    MyExpirementalString(const char *& cstr)
    Ответ написан
    Комментировать
  • Какой результат будет?

    @res2001
    Developer, ex-admin
    Обычно такую конструкцию используют для преобразования числа из строкового представления в числовое. Например функции типа atoi как раз используют такой подход.
    Ответ написан
    Комментировать
  • [linux] как выделить больше памяти/ресурcов для приложения?

    @res2001
    Developer, ex-admin
    Распараллеливать смысла нет - дисковые операции плохо паралляться, т.к. диск - медленное устройство. Основной тормоз в вашем случае именно он. Читайте не построчно, а большими блоками, кратными размеру кластера, например по 4/8/16Кб, этим сократите количество дисковых операций. Код конечно усложниться. В прошлом вопросе вам Oleg Shevelev это уже писал.
    Для распараллеливания можно использовать асинхронный IO, но, имхо, это еще больше усложнит код, скорее всего для вашей задачи это не нужно (должно помочь чтение большими порциями), т.к. дальнейшие операции с прочитанной строкой тривиальны.
    И кстати, можно не делать чтение файла на С++, если хорошо знаете Матлаб делайте на нем по тому же алгоритму - т.к. дисковые операции основной тормоз, то преимущества от использования С++ практически не будет.

    А вообще система отдает программе столько ресурсов сколько ей требуется, если ресурсов не хватает - обычно программа завершается с ошибкой.
    Ответ написан
    6 комментариев
  • Упражнение из книги Страуструпа. Программа мини-калькулятор. Цифры записанные в строковом формате. Что имеется ввиду в данном контексте?

    @res2001
    Developer, ex-admin
    Числа в строковом формате - да просто string. Чтоб производить над ними арифметические действия нужно преобразовать в число - см. std::atoi и т.п.
    Немного забегая вперед - преимущество ввода в строковом формате в том, что можно все выражение записать в одной строке, а потом эту одну строку парсить. Т.е. можно сделать универсальный калькулятор, которые воспринимает не два аргумента и операцию, а сложные выражения. Кроме простых действий в этом случае в калькулятор можно прикрутить вычисления разнообразных математических функций и т.п.
    Ответ написан
    Комментировать
  • Причина бесконечного вывода несвязанных символов?

    @res2001
    Developer, ex-admin
    Причин много:
    1.В функции addressSearch в цикле ты читаешь в name ввод пользователя в цикле, затем присваиваешь адрес name в массив. Тут ошибка в том, что name у тебя все время одна и та же переменная и весь массив у тебя будет заполнен одним и тем же значением - адресом name. На каждой итерации цикла после ввода, name будет иметь свое значение, но в следующей итерации это значение затрется следующим вводом. Таким образом в address на выходе из функции ты будешь иметь в каждом элементе адрес name, который ссылается на один и тот же объект, содержащий последний ввод пользователя.

    2.В функции addressSearch переменные name и address объявлены как локальные, после выхода из функции этих переменных уже не существует, а ты возвращаешь из функции адрес не существующей переменной. Поэтому и бардак в выводе.
    Ответ написан
    1 комментарий
  • Какую выбрать среду для написания кода на С++?

    @res2001
    Developer, ex-admin
    А отлаживать то же в notepad++ будешь? А контекстная справка и прочие плюшки?
    У микрософта всегда была хорошая среда разработки. Не так уж там все и сложно.
    Из других вариантов: NetBeans, Eclips. Но по мне для винды VS лучше.
    Ответ написан
    Комментировать
  • Как конкретного наследника связать с конкретным родителем?

    @res2001
    Developer, ex-admin
    А если с наследованием, то СОМ1 и СОМ2 тут явно лишние - все действия надо делать через Devы.
    Ответ написан
    Комментировать
  • Наследование интерфейсов С++?

    @res2001
    Developer, ex-admin
    В go() передается указатель на IServer, а в iServer нет метода start.
    Ответ написан
    2 комментария