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

Ответы на вопросы для собеседования 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

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

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

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

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

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

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

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

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

913 просмотров
От 12 октября 2023
Вопросник
  10 вопросов

Всё о репликации баз данных

Описание понятий и процессов репликации БД

943 просмотра
От 8 октября 2023
Викторина
  26 вопросов

Викторина по Python - Junior

Вопросы на собеседовании по Python для Junior-позиции

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

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

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

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

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

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

1758 просмотров
От 4 июня
Викторина
  20 вопросов

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

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

66 просмотров
От 2 июня 2023

Топ тредов

Gravatar for 1233freddypopa
freddypopa
: Добавить чекбокс, который отвечает за показ ранее тронутых задач (черновик)

Последнее сообщение:
Логотип Девстанции
Девстанция
: Отличная идея! Возьмём её на заметку!
1 сообщение
93 просмотра

Логотип Девстанции
Девстанция
: Предложите идею и получите спонсорский доступ на месяц

Последнее сообщение:
Gravatar for 1236borisops
Borisops
: Добавить темную тему) что бы можно было посмотреть сложность алгоритма и добавить тэги.
10 сообщений
321 просмотр

Gravatar for 815unicozz
unicozz
: Задача в JS под названием "Соревнование" содержит ошибку

Последнее сообщение:
Логотип Девстанции
Девстанция
: Привет! В примерах вызова функции действительно была опечатка, исправили. Однако, должен получиться...
2 сообщения
136 просмотров

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