10 вопросов и ответов на собеседовании C++ разработчика
1. В чем разница между указателем и ссылкой в С++?
Ответ: Указатель может быть переназначен n-раз, в то время как ссылка не может быть переназначена после бинда. Указатели могут указывать в NULL, тогда как ссылка всегда ссылается на объект. Программист не может получить адрес ссылки, как это возможно с указателями, но можно взять адрес объекта, на который указывает ссылка, и выполнить действия с ним.
2. Чем new() отличается от malloc()?
Ответ: New() является препроцессором, в то время как malloc() - методом.
3. Использование точки в С++
Ответ: Точка - это чаще всего ссылка на метод или свойство объекта в ООП. Связь между объектом, атрибутами и методами обозначается точкой («.»), установленной между ними.
4. Что такое this?
Ответ: Ключевое слово this передается всем нестатическим методам как скрытый аргумент и доступен в виде локальной переменной внутри всех нестатических методов. Оператор this является постоянным указателем, который хранит в памяти ссылку на текущий объект.
5. Что такое динамическая и статическая типизация?
Ответ: Статически типизированные языки - это языки, в которых проверка типа совершается во время компиляции, а в динамически типизированных - в рантайме. В С++, пользователь должен сообщить компилятору, с каким типом объекта он работает во время компиляции.
6. Что подразумевается под делегатом?
Ответ: Делегат - это объект, действующий от имени, или в паре с другим объектом, обнаружившим событие во время выполнения программы.
7. Что такое виртуальная функция?
Ответ: Виртуальная функция - это метод, который используется в рантайме для замены реализованного функционала, предоставляемого базовым классом. Ключевое слово virtual используется для создания виртуального метода.
8. Что означают ключевые слова volatile и mutable?
Ответ: volatile сообщает компилятору, что переменная может измениться без его ведома. Эти переменные не кэшируются компилятором и поэтому всегда считываются из памяти.
mutable может использоваться для переменных класса. Такие переменные могут изменяться изнутри функций класса.
9. В каком порядке инициализируются члены класса?
Ответ: Члены класса создаются в порядке их объявления в классе. Уничтожаются они в обратном порядке.
10. Как защитить объект от копирования?
Ответ: Сделать private конструктор копирования и оператор =.
class NonCopyable
{
public:
NonCopyable(){}
private:
NonCopyable(NonCopyable&){}
private:
void operator=(const NonCopyable&){}
};
NonCopyable a;
NonCopyable b = a
a = b;