С++ задачи и вопросы
567 subscribers
531 photos
4 files
200 links
Задачи, тесты и теоретические вопросы по С++

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Download Telegram
Какой будет выход из следующей программы?

Вопрос: https://proghub.ru/q/abd3ab

Добавить свой вопрос
Какой будет выход из следующей программы?
Anonymous Quiz
48%
0
35%
1
0%
-1
17%
Недопустимое использование функции strcmp ()
☝️Объяснение:

Мы кидаем `SpecialException`. Оно унаследовано от `GeneralException`, но принимается по значению, поэтому динамический тип e будет `GeneralException`, не `SpecialException`. В С++ community такой эффект называют ещё `slicing`.

Мы должны принимать `exception` по ссылке `catch (GeneralException& e)`, тогда динамический тип будет `SpecialException`, и программа выведет `S`.
👍3
Какой символ разрешен в имени идентификатора переменной?
Anonymous Quiz
19%
$
3%
@
76%
_
2%
.
Куда указывает итератор ptr после выполнения следующих двух строк кода?
?


Тест: https://proghub.ru/t/cpp-stl

Добавить свой вопрос
☝️Объяснение:

Ошибка компиляции, так как при декларации `A::createB()` , `friend` класса `B`, компилятор должен знать, что `createB` существует. Так как функция видна только в её определении после определения класса `B`, то компилятор выдаст ошибку.
Ребята, всем привет. Начинаем возобновлять постинг на каналах😘
Что будет выведено на экран?

Вопрос: https://proghub.dev/q/cc2b82

Добавить свой вопрос
Что будет выведено на экран?
Anonymous Quiz
55%
Base
45%
Derived
☝️Объяснение:

При создании объекта класса-наследника в первую очередь последовательно вызываются конструкторы всех его базовых классов. Когда происходит вызов конструктора класса Base, указатель на таблицу виртуальных функций указывает на таблицу класса Base, а уже при вызове конструктора класса Derived - на класс Derived. Поэтому не рекомендуется вызывать виртуальные функции из конструктора.
👍3
☝️Объяснение:

Виртуальные функции берут стандартный аргумент из самого Base класса. Поэтому ответ будет B1.

Многие стайлгайды запрещают это, потому что ведёт к таким странным ошибкам. Почему так сделано -- понятно, если у вас есть динамический тип, то мы должны где-то ещё хранить информацию о дефолтных аргументах, так как они обязаны вычисляться до вызова функции. Так как виртуализация в C++ сделана через разыменовывание vptr, где грубо говоря будут храниться указатели на функции, то единственный вариант дефолтного аргумента -- в самом интерфейсе.
🔥2👍1