Узнайте насколько вы способны работать С++ на реальных проектах благодаря тесту с 10 вопросами.

Не попадитесь в ловушку — для некоторых вопросов есть несколько правильных ответов.
Насколько хорошо вы знаете С++
ТЕСТ
Насколько вы хорошо знаете С++
Узнайте насколько вы способны работать С++ на реальных проектах благодаря тесту с 10 вопросами. Не попадитесь в ловушку — для некоторых вопросов есть несколько правильных ответов.
Начать тест
В каких случаях счетчик cnt будет увеличен ровно 1 раз?
Не совсем. В случае `while (false) { ++cnt; }` тело цикла не выполнится ни разу, а в других примерах счетчик увеличится больше одного раза.
Верно! Счетчик `cnt` увеличится 1 раз в таких случаях, как `for (auto _ : std::vector(1, 2)) { ++cnt; }` и `do { cnt++; } while (false);`, где цикл выполняется только один раз
Не совсем. В случае `while (false) { ++cnt; }` тело цикла не выполнится ни разу, а в других примерах счетчик увеличится больше одного раза.
Верно! Счетчик `cnt` увеличится 1 раз в таких случаях, как `for (auto _ : std::vector(1, 2)) { ++cnt; }` и `do { cnt++; } while (false);`, где цикл выполняется только один раз
Не совсем. В случае `while (false) { ++cnt; }` тело цикла не выполнится ни разу, а в других примерах счетчик увеличится больше одного раза.
Дальше
Проверить
Узнать результат
Что можно сказать об одном из стандартных STL-контейнеров cont, если для него истинен предикат cont.begin() == cont.end()?
Почти, но нет. Это условие говорит только о том, что контейнер пуст
Отлично! Если `cont.begin() == cont.end()`, это означает, что контейнер пуст
Почти, но нет. Это условие говорит только о том, что контейнер пуст
Почти, но нет. Это условие говорит только о том, что контейнер пуст
Почти, но нет. Это условие говорит только о том, что контейнер пус
Дальше
Проверить
Узнать результат
Для ссылки foo&, в отличии от указателя foo*, справедливы следующие утверждения:
Правильно! Ссылка не может быть переопределена на другой объект и не может быть нулевой или неопределенной
Ссылки могут быть скопированы в другую ссылку, использованы для вызова неконстантных и создать их можно на объекты в любом месте памяти, не только на стеке
Ссылки могут быть скопированы в другую ссылку, использованы для вызова неконстантных и создать их можно на объекты в любом месте памяти, не только на стеке
Ссылки могут быть скопированы в другую ссылку, использованы для вызова неконстантных и создать их можно на объекты в любом месте памяти, не только на стеке
Правильно! Ссылка не может быть переопределена на другой объект и не может быть нулевой или неопределенной
Дальше
Проверить
Узнать результат
В программе могут одновременно существовать две перегрузки некоторой функции, отличающиеся только:
Не так. Перегрузка функций не может основываться только на типе возвращаемого значения, значениях аргументов по умолчанию или наличии спецификатора noexcept
Верно! Функции могут различаться по типу или количеству аргументов, что позволяет их перегружать
Верно! Функции могут различаться по типу или количеству аргументов, что позволяет их перегружать
Не так. Перегрузка функций не может основываться только на типе возвращаемого значения, значениях аргументов по умолчанию или наличии спецификатора noexcept
Не так. Перегрузка функций не может основываться только на типе возвращаемого значения, значениях аргументов по умолчанию или наличии спецификатора noexcept
Дальше
Проверить
Узнать результат
Чем отличаются определения class и struct?
Неправильно. Различия между `class` и `struct` не касаются выравнивания элементов, возможности определять приватные методы или полиморфизма
Неправильно. Различия между `class` и `struct` не касаются выравнивания элементов, возможности определять приватные методы или полиморфизма
Отлично! Главное различие между `class` и `struct` заключается в типе наследования и видимости элементов по умолчанию: в `class` они private, а в `struct` — public
Отлично! Главное различие между `class` и `struct` заключается в типе наследования и видимости элементов по умолчанию: в `class` они private, а в `struct` — public
Неправильно. Различия между `class` и `struct` не касаются выравнивания элементов, возможности определять приватные методы или полиморфизма
Дальше
Проверить
Узнать результат
Для контейнера std::map<int, int> cont следующий код
for (auto it = cont.begin(); it != cont.end();) {
if (it->first == it->second)
it = cont.erase(it);
else
++it;
}
Неправильно. Этот код не увеличивает значения элементов, не удаляет первый и второй элементы, не сдвигает их и не меняет местами ключи и значения. Подробнее про это мы рассказали на курсе, чтобы лучше понять, как работают такие циклы с удалением элементов в std::map
Неправильно. Этот код не увеличивает значения элементов, не удаляет первый и второй элементы, не сдвигает их и не меняет местами ключи и значения. Подробнее про это мы рассказали на курсе, чтобы лучше понять, как работают такие циклы с удалением элементов в std::map
Правильно! Этот код удаляет элементы cont, у которых значение совпадает с ключом
Неправильно. Этот код не увеличивает значения элементов, не удаляет первый и второй элементы, не сдвигает их и не меняет местами ключи и значения. Подробнее про это мы рассказали на курсе, чтобы лучше понять, как работают такие циклы с удалением элементов в std::map
Неправильно. Этот код не увеличивает значения элементов, не удаляет первый и второй элементы, не сдвигает их и не меняет местами ключи и значения. Подробнее про это мы рассказали на курсе, чтобы лучше понять, как работают такие циклы с удалением элементов в std::map
Дальше
Проверить
Узнать результат
Какие из данных методов пользовательского класса будут по умолчанию автоматически сгенерированы компилятором?
Отлично! Компилятор автоматически генерирует конструктор по умолчанию, оператор присваивания, конструктор копирования, деструктор и конструктор сдвига, если они не определены явно
Отлично! Компилятор автоматически генерирует конструктор по умолчанию, оператор присваивания, конструктор копирования, деструктор и конструктор сдвига, если они не определены явно
Отлично! Компилятор автоматически генерирует конструктор по умолчанию, оператор присваивания, конструктор копирования, деструктор и конструктор сдвига, если они не определены явно
Отлично! Компилятор автоматически генерирует конструктор по умолчанию, оператор присваивания, конструктор копирования, деструктор и конструктор сдвига, если они не определены явно
Отлично! Компилятор автоматически генерирует конструктор по умолчанию, оператор присваивания, конструктор копирования, деструктор и конструктор сдвига, если они не определены явно
Дальше
Проверить
Узнать результат
Что такое виртуальный метод?
Неправильно. Виртуальный метод — это метод, переопределение которого в наследнике будет вызвано при обращении по ссылке на базовый класс
Неправильно. Виртуальный метод — это метод, переопределение которого в наследнике будет вызвано при обращении по ссылке на базовый класс
Неправильно. Виртуальный метод — это метод, переопределение которого в наследнике будет вызвано при обращении по ссылке на базовый класс
Правильно! Виртуальный метод — это метод, переопределение которого в наследнике будет вызвано при обращении по ссылке на базовый класс
Неправильно. Виртуальный метод — это метод, переопределение которого в наследнике будет вызвано при обращении по ссылке на базовый класс
Дальше
Проверить
Узнать результат
В чем отличия (дефолтного) оператора new от std::malloc?
Отлично! new вызывает конструктор объекта, в то время как malloc — нет. Кроме того, new может вызвать исключение при недостатке памяти, а malloc вернет nullptr
Неправильно. malloc выделяет память в куче, а не на стеке, и возвращает указатель, а не ссылку. Также new подходит для любых типов, а не только для классов
Неправильно. malloc выделяет память в куче, а не на стеке, и возвращает указатель, а не ссылку. Также new подходит для любых типов, а не только для классов
Отлично! new вызывает конструктор объекта, в то время как malloc — нет. Кроме того, new может вызвать исключение при недостатке памяти, а malloc вернет nullptr
Неправильно. malloc выделяет память в куче, а не на стеке, и возвращает указатель, а не ссылку. Также new подходит для любых типов, а не только для классов
Дальше
Проверить
Узнать результат
std::shared_ptr<T> для классового типа T:
Не совсем. std::shared_ptr не выполняет автоматическую аллокацию памяти, не делает методы класса потоко-безопасными, и его можно копировать независимо от конструктора копирования T
Не совсем. std::shared_ptr не выполняет автоматическую аллокацию памяти, не делает методы класса потоко-безопасными, и его можно копировать независимо от конструктора копирования T
Верно! std::shared_ptr автоматически вызывает delete для объекта, на который больше нет указателей, тем самым управляя памятью безопасно
Не совсем. std::shared_ptr не выполняет автоматическую аллокацию памяти, не делает методы класса потоко-безопасными, и его можно копировать независимо от конструктора копирования T
Не совсем. std::shared_ptr не выполняет автоматическую аллокацию памяти, не делает методы класса потоко-безопасными, и его можно копировать независимо от конструктора копирования T
Дальше
Проверить
Узнать результат
Кажется, вам не помешает более глубокое изучение C++.
Если захотите учиться с нами – добро пожаловать на наш курс.
Получить спецусловия
Кое-что вы знаете! Но, кажется, вам не помешает более глубокое изучение C++.
Если захотите учиться с нами – добро пожаловать на наш курс.

Получить спецусловия
Поздравляем! Вы хорошо ориентируетесь в C++, и такими тестами вас не смутить!
Можете быть уверены — наш курс будет для вас по силам!

Получить спецусловия