Каков будет результат выполнения следующего кода?
?
Вопрос: https://proghub.ru/q/a35126
Добавить свой вопрос
?
Вопрос: https://proghub.ru/q/a35126
Добавить свой вопрос
🔥1
  Каков будет результат выполнения следующего кода?
  Anonymous Quiz
    6%
    81
      
    10%
    ошибка компиляции
      
    19%
    1 4 9 16 25 36 49 64 81
      
    0%
    Undefined behavior
      
    65%
    81 64 49 36 25 16 9 4 1
      
    Какой будет выход из следующей программы?
  Anonymous Quiz
    49%
    0
      
    34%
    1
      
    0%
    -1
      
    17%
    Недопустимое использование функции strcmp ()
      
    Что выведет программа?
  Anonymous Quiz
    8%
    Не скомпилируется, так как exception принимается по значению
      
    45%
    G
      
    13%
    SG
      
    26%
    S
      
    8%
    Неопределенное поведение
      
    ☝️Объяснение:
Мы кидаем `SpecialException`. Оно унаследовано от `GeneralException`, но принимается по значению, поэтому динамический тип e будет `GeneralException`, не `SpecialException`. В С++ community такой эффект называют ещё `slicing`.
Мы должны принимать `exception` по ссылке `catch (GeneralException& e)`, тогда динамический тип будет `SpecialException`, и программа выведет `S`.
Мы кидаем `SpecialException`. Оно унаследовано от `GeneralException`, но принимается по значению, поэтому динамический тип e будет `GeneralException`, не `SpecialException`. В С++ community такой эффект называют ещё `slicing`.
Мы должны принимать `exception` по ссылке `catch (GeneralException& e)`, тогда динамический тип будет `SpecialException`, и программа выведет `S`.
👍3
  Куда указывает итератор ptr после выполнения следующих двух строк кода?
?
Тест: https://proghub.ru/t/cpp-stl
Добавить свой вопрос
  ?
Тест: https://proghub.ru/t/cpp-stl
Добавить свой вопрос
Куда указывает итератор ptr после выполнения следующих двух строк кода?
  Anonymous Quiz
    10%
    на элемент, находящийся перед первым
      
    59%
    на элемент, находящийся за последним
      
    27%
    на последний элемент вектора
      
    5%
    на первый элемент вектора
      
    Что выведет программа?
  Anonymous Quiz
    7%
    A
      
    7%
    B
      
    43%
    AB
      
    3%
    BA
      
    37%
    Не скомпилируется
      
    3%
     Неопределенное поведение
      
    ☝️Объяснение:
Ошибка компиляции, так как при декларации `A::createB()` , `friend` класса `B`, компилятор должен знать, что `createB` существует. Так как функция видна только в её определении после определения класса `B`, то компилятор выдаст ошибку.
  Ошибка компиляции, так как при декларации `A::createB()` , `friend` класса `B`, компилятор должен знать, что `createB` существует. Так как функция видна только в её определении после определения класса `B`, то компилятор выдаст ошибку.
Что верно о алгоритме быстрой сортировки?
  Anonymous Quiz
    15%
    Алгоритм требует дополнительной памяти
      
    17%
    Для неотсортированного и отсортированного массива количество сравнений примерно равное
      
    42%
    Среднее количество обменов O(n*log n)
      
    27%
    Считается самым быстрым на практике алгоритмом
      
    ☝️Объяснение:
При создании объекта класса-наследника в первую очередь последовательно вызываются конструкторы всех его базовых классов. Когда происходит вызов конструктора класса Base, указатель на таблицу виртуальных функций указывает на таблицу класса Base, а уже при вызове конструктора класса Derived - на класс Derived. Поэтому не рекомендуется вызывать виртуальные функции из конструктора.
При создании объекта класса-наследника в первую очередь последовательно вызываются конструкторы всех его базовых классов. Когда происходит вызов конструктора класса Base, указатель на таблицу виртуальных функций указывает на таблицу класса Base, а уже при вызове конструктора класса Derived - на класс Derived. Поэтому не рекомендуется вызывать виртуальные функции из конструктора.
👍3
  Что выведет программа?
  Anonymous Quiz
    14%
    A1
      
    43%
    B1
      
    2%
    A2
      
    30%
    B2
      
    7%
    Не скомпилируется
      
    5%
    Неопределенное поведение
      
    ☝️Объяснение:
Виртуальные функции берут стандартный аргумент из самого Base класса. Поэтому ответ будет B1.
Многие стайлгайды запрещают это, потому что ведёт к таким странным ошибкам. Почему так сделано -- понятно, если у вас есть динамический тип, то мы должны где-то ещё хранить информацию о дефолтных аргументах, так как они обязаны вычисляться до вызова функции. Так как виртуализация в C++ сделана через разыменовывание vptr, где грубо говоря будут храниться указатели на функции, то единственный вариант дефолтного аргумента -- в самом интерфейсе.
Виртуальные функции берут стандартный аргумент из самого Base класса. Поэтому ответ будет B1.
Многие стайлгайды запрещают это, потому что ведёт к таким странным ошибкам. Почему так сделано -- понятно, если у вас есть динамический тип, то мы должны где-то ещё хранить информацию о дефолтных аргументах, так как они обязаны вычисляться до вызова функции. Так как виртуализация в C++ сделана через разыменовывание vptr, где грубо говоря будут храниться указатели на функции, то единственный вариант дефолтного аргумента -- в самом интерфейсе.
🔥2👍1