1315 просмотров
от 4 июня 2024
C/C++

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

Вопросы и ответы с собеседований C++ разработчиков. Определение указателей, встраивание C-кода, структуры, классы, методы, ключевое слово const, потребление и выделение памяти, обработка исключений, практические вопросы и многое другое.

1

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

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

Комментарии
0/3000
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); }

Комментарии
0/3000
3

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

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

Комментарии
0/3000
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.

Комментарии
0/3000
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

Комментарии
0/3000
6

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

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

Комментарии
0/3000
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 Чисто виртуальный метод — это метод, у которого отсутствует реализация. Абстрактный класс — это класс, имеющий хотя бы один чисто виртуальный метод. Как следствие, экземпляр подобного класса не может быть создан т. к. отсутствует реализация виртуального метода.

Комментарии
0/3000
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().

Комментарии
0/3000
9

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

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

Комментарии
0/3000
Авторизуйтесь, чтобы открыть доступ к контенту
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

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

Вопросники по C/C++
C/C++
26 вопросов
Вопросы и ответы с собеседований по C++
1315 просмотров
C/C++
17 вопросов
Вопросы и ответы с собеседований по C
1090 просмотров
Хотите заработать на создании вопросников?
Стать редактором
Смежные категории
Python
32 вопроса
Вопросы и ответы с собеседований по Python
2347 просмотров
Computer Science
13 вопросов
Вопросы и ответы с собеседований про ООП
1133 просмотра
Базы данных
10 вопросов
Вопросы с собеседований о репликации баз данных
1407 просмотров
Computer Science
15 вопросов
Вопросы и ответы с собеседований по DDD
1445 просмотров
Computer Science
11 вопросов
Вопросы и ответы про интернет-протоколы
1359 просмотров
Computer Science
28 вопросов
Объяснение паттернов проектирования с примерами
1341 просмотр
Рекомендуем
Computer Science
11 вопросов
Вопросы и ответы про интернет-протоколы
1359 просмотров
Базы данных
60 вопросов
Вопросы и ответы с собеседований по SQL
2193 просмотра
Computer Science
15 вопросов
Вопросы и ответы с собеседований по DDD
1445 просмотров
Git
20 вопросов
Вопросы и ответы с собеседований по Git
1727 просмотров
Computer Science
28 вопросов
Объяснение паттернов проектирования с примерами
1341 просмотр
Computer Science
13 вопросов
Вопросы и ответы с собеседований про ООП
1133 просмотра
Другие разделы

Лента

Активность пользователей Девстанции

Перейти к ленте

Лидеры

Рейтинг самых результативных пользователей сообщества

Перейти к лидерам

Треды

Общение по интересам и связь с разработчиками

Перейти к тредам

Задачи

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

Перейти к задачам

Вопросы

Ответы на вопросы с технических собеседований

Вы находитесь здесь

Викторины

Интерактивные викторины по вопросам с собеседований

Перейти к викторинам
Мы в Telegram
Новости проекта, общение с разработчиками, общение по интересам - присоединяйтесь!