597 просмотров
От 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

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

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

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

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

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

Викторина
  12 вопросов

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

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

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

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

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

576 просмотров
От 8 октября 2023
Вопросник
  11 вопросов

Теория шардинга баз данных

О распределении данных между серверами

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

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

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

8978 просмотров
От 27 июня
Вопросник
  7 вопросов

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

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

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

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

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

168 просмотров
От 30 мая 2023

Топ тредов

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

Последнее сообщение:
: Ой, не увидела. Круто, спасибо!
8 сообщений
185 просмотров

: Можно добавить таймер на решение задач

Последнее сообщение:
: да, с момента открытия и до успешных тестов. Чтобы трекать время выполнения )
3 сообщения
116 просмотров

Gravatar for 253malvina
Malvina
: Добавьте angular раздел

Последнее сообщение:
: Раздел открыт!
3 сообщения
137 просмотров

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