1257 просмотров
От 4 июня 2024

Ответы на вопросы для собеседования C++ разработчика

1

Какой код выполняется до main?

Конструкторы глобальных объектов.

2

Как вызвать функцию C в коде C++?

Это возможно, если использовать extern «C»: //C code void func(int i) { //code } void print(int i) { //code } //C++ code extern "C"{ void func(int i); void print(int i); } void myfunc(int i) { func(i); print(i); }

3

Что такое указатель?

Указатель — это переменная, которая хранит адрес памяти объекта. Указатели широко используются в C и C++ для трех основных целей: 1. Для выделения новых объектов в куче, 2. Для передачи функций другим функциям 3. Для итерации элементов в массивах или других структурах данных.

4

Раскажите про ключевое слово const

1. Позволяет задать константность объекта 2. Позволяет задать константность указателя 3. Позволяет указать, что данный метод не модифицирует члены класса, т.е. сохраняет состояние объекта Не можем изменить значение объекта: const int i = 1; i = 2; // error C3892: 'i' : you cannot assign to a variable that is const Не можем изменить указатель на объект: int i = 1; int* const j(&i); int k = 2; *j = k; // Ok j = &k; // error C3892: 'j' : you cannot assign to a variable that is const Не можем изменить члены класса: class Foo { private: int i; public: void func() const { i = 1; // error C3490: 'i' cannot be modified because it is being accessed through a const object } }; Дополнение: константный метод может изменять члены класса, если они объявлены как mutable.

5

Как запретить копирование объекта?

Для того, чтобы запретить копирование объекта, нужно сделать private конструктор копирования и оператор =. class NonCopyable { public: NonCopyable(){} private: NonCopyable(NonCopyable&){} private: void operator=(const NonCopyable&){} }; NonCopyable a; NonCopyable b = a; // error C2248: 'NonCopyable::NonCopyable' : cannot access private member a = b; // error C2248: 'NonCopyable::operator =' : cannot access private member

6

Зачем нужен модификатор virtual?

В C++ виртуальные функции позволяют поддерживать полиморфизм – одну из ключевых составляющих ООП. С его помощью в классах-потомках можно переопределять функции класса-родителя. Без виртуальной функции мы получаем «раннее связывание», а с ней – «позднее». То есть, какая реализация метода используется, определяется непосредственно во время выполнения и основывается на типе объекта с указателем на объект, из которого он построен.

7

Что такое чисто виртуальный метод и абстрактный класс?

// Абстрактный класс class Foo { public: // Чисто виртуальный метод virtual void func() = 0; }; class Bar : public Foo { public: virtual void func() { } }; Foo f; // error C2259: 'Foo' : cannot instantiate abstract class Bar b; // Ok Чисто виртуальный метод — это метод, у которого отсутствует реализация. Абстрактный класс — это класс, имеющий хотя бы один чисто виртуальный метод. Как следствие, экземпляр подобного класса не может быть создан т. к. отсутствует реализация виртуального метода.

8

Что такое виртуальный деструктор?

Чтобы избежать возможной утечки ресурсов или другого неконтролируемого поведения объекта, в логику работы которого включен вызов деструктора. Пример: class Base { public: virtual ~Base() { std::cout << "Hello from ~Base()" << std::endl; } }; class Derived : public Base { public: virtual ~Derived() { // Здесь могла бы быть очистка ресурсов std::cout << "Hello from ~Derived()" << std::endl; } }; Base *obj = new Derived(); delete obj; Вывод: Hello from ~Derived() Hello from ~Base() Без ключевого слова virtual у родительского класса Base деструктор порожденного класса не был бы вызван. Т.е. вызвался бы только ~Base().

9

Что такое виртуальный конструктор?

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

Логотип ДевстанцииАвторизуйтесь, чтобы просматривать следующий контент
11

Разница между struct и class?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
12

Разница между struct и union?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
13

Сколько памяти занимает произвольная структура?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
14

Различия std::array и std::vector?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
15

В чем отличие vector от deque?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
16

В чем отличие malloc от new?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
17

Различия delete и delete[]?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
18

Как добавить объект в качестве ключа в ассоциативные контейнеры?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
19

Что дают разные модификаторы при наследовании?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
20

Для чего используется ключевое слово volatile?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
21

Для чего используется вызов throw без аргументов?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
22

Как сгенерировать pure virtual function call исключение?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
23

Какие нюансы у auto_ptr?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
24

Бывает такое, что оператор new не выделяет память?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
25

Когда вызывается конструктор копирования, а когда копирующий оператор присваивания?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
26

Можно ли использовать ссылку при возвращении из функции?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
27

Что будет выведено на экран?

Логотип ДевстанцииАвторизуйтесь, чтобы получить доступ
Хотите стать частью сообщества Девстанции?
Вступайте в наш чат в Telegram

Также в этой категории

Вопросник
  17 вопросов

Вопросы с собеседований по C

Ответы на вопросы для собеседования по C

1043 просмотра
От 4 июня 2024
Задачник
  32 задачи

Топ 35 задач с собеседований по C++

Разбор решений для алгоритмических задач с собеседований по C++

4005 просмотров
От 25 февраля 2024

Вам может быть интересно

Вопросник
  7 вопросов

Коллекция полезных команд для Docker

Большая шпаргалка по всем командам Docker

1197 просмотров
От 12 октября 2023
Задачник
  90 задач

Топ 90 алгоритмических задач по Python

Подборка решений для задач с собеседований Python-разработчиков

21619 просмотров
От 27 июня 2024
Вопросник
  60 вопросов

Топ 60 вопросов про базы данных и SQL

Ответы на вопросы с собеседований по БД и SQL

2063 просмотра
От 4 июня 2024
Вопросник
  32 вопроса

30 вопросов с собеседований по Python

Ответы на вопросы с собеседований по Python

2260 просмотров
От 4 июня 2024
Викторина
  12 вопросов

Викторина по Python - Middle/Senior

Продвинутые вопросы для собеседования Python-разработчика

165 просмотров
От 30 мая 2023
Викторина
  20 вопросов

Викторина по Django - Junior/Middle

Базовые вопросы с собеседования по Django

104 просмотра
От 2 июня 2023

Топ тредов

Gravatar for 2518iiitblpb
iiitblpb
: Задача на JS "Сложение цифр числа"

Последнее сообщение:
: Вот вам ответ на вашу загадку: "Numeric literals with absolute values equal to 2^53 or greater are t...
4 сообщения
50 просмотров

Gravatar for 1773kartan
Kartan
: Задача в JavaScript "Поиск пары чисел по сумме"

Последнее сообщение:
: Исправлено!
3 сообщения
61 просмотр

: Задача в JavaScript "Форматирование текста"

Последнее сообщение:
: Но тогда другой кейс уже противоречит подходу. Вызов: formatText("Мама пошла в магазин", 4) Ожидалос...
3 сообщения
69 просмотров

Все категории