 |
|
 | Вопросы по C++
- Объясните разницу между понятиями виртуальная функция и виртуальное наследование .
- Объясните, чем отличаются глобальные статические функции от статических функций, членов классов.
- Что общего, и чем обычно отличаются реализации конструкторов копирования, инициализации и перегруженной операции присваивания?
- Сравните 2 способа перегрузки операций: как метод класса и как внешнюю функцию-друг .
- Как создать в классе виртуальные конструкторы и деструктор?
- Может ли шаблонный (темплэйтный) класс быть абстрактным? Почему?
- В чем специфика перегрузки операций "sizeof", "typeid", "new" и "delete"? Чем она вызвана?
- Сравните особенности перегрузки операций "()" и "[]".
- Дайте развернутое сравнение работы со строками в стиле С (char*) и С++ (string).
- Дайте развернутое сравнение работы с динамической памятью в С и С++.
- Дайте развернутое сравнение стандартных средств ввода-вывода в С и С++.
- Что означает оператор throw без параметра?
- Расскажите, какие бывают итераторы и чем они отличаются.
- В чем различие между модификаторами register, const и volatile?
- Как написать функцию, принимающую заранее неизвестное число аргументов?
- В чем разница между конструкциями "extern" и "extern "C""?
- В чем, в рамках традиционного С++, различие между using и include?
- Сравните использование макросов, inline-функций и template-функций.
- Как грамотно организовать нетривиальную сортировку средствами стандартных библиотек С и С++ (сравните подходы)?
- Расскажите, что и как нужно сделать, что бы объекты написанного Вами класса можно было помещать в cout и читать из cin?
- Сравните различные формы операций приведения типа (в стиле С и в стиле С++). Расскажите о перегрузке этих операций.
- У каждого класса есть некоторые особые функции-члены, вызовы которых могут вставляться компилятором в код без явного на то указания программиста. Перечислите такие функции, члены и случаи, когда могут возникать неявные вызовы.
- Как задать значения аргументов функций по умолчанию? Каковы плюсы и минусы использования этой возможности С++? Каковы ее альтернативы?
- При написании оператора catch мы можем в качестве типа его аргумента написать непосредственно тип исключения, указатель на тип исключения либо ссылку на тип исключения. Сравните эти подходы.
- В каком порядке вычисляются аргументы функции при ее вызове: слева направо, справа налево или еще как-нибудь? Например, в каком порядке будут вычислены аргументы в следующем примере: f(5+I, ++I); ?
- Если при создании переменной программист ее явно не инициализировал, то, в некоторых случаях, компилятор сам даст ей некое, заранее известное начальное значение, а в некоторых случаях начальное значение будет непредсказуемо. От чего это зависит?
- От чего зависит порядок создания (последовательность вызова конструкторов) глобальных переменных? Какие практические выводы из этого следуют?
- Есть код:
f(){return 3.5;}
...
double d = f()
Чему равно значение d ? Почему?
- Объясните разницу между понятиями "анонимное пространство имен" и "анонимное перечисление".
- Что произойдет, если исключение будет выброшено изнутри конструктора?
- Что из себя представляет и для чего применяется специализация шаблонов?
- В чем специфика применения операции delete к указателям на функции?
- Что такое и как используется this ?
- Для чего применяется предварительное объявление (forward declaration) классов?
- Какие директивы препроцессора обычно используются для предотвращения повторного включения заголовочного файла?
- Какие конструкции для организации ветвления предоставляет программистам С++?
- Какие конструкции для организации циклов предоставляет программистам С++?
- Что такое полиморфизм? Наличие какие конструкций в С++ позволяет утверждать, что этот язык поддерживает полиморфизм? Для чего используется полиморфизм?
- Что такое lvalue ?
- Для чего в C++ используется ключевое слово finaly ?
- Сравните операторы continue и break.
- Что такое и для чего нужны триграфы?
- В чем отличие и что общее в специфике перегрузки конструкторов и деструкторов?
- Что такое и как используется анонимное объединение?
- Можно ли в С++ (если да - то как) написать такой класс, от которого нельзя пронаследовать в дальнейшем никакой другой класс?
- Даны два класса, один из которых является наследником от второго. Напишите, как должны выглядеть конструкторы копирования-инициализации для этих классов (составьте пример).
- В чем специфика операций || и && ? В чем специфика перегрузки этих операций?
- Сравните понятия "статическая переменная" и "статическая переменная - член класса".
- В чем опасность использования макросов? Приведите примеры.
- Сравните операторы throw и return.
- Как инициализировать переменную, являющуюся приватным статическим членом класса?
- Для чего нужен и как используется класс auto_ptr ?
|
 |
Данный материал представляет собой список вопросов по С++, наиболее часто
задаваемых на техническом интервью претендентам, желающим поступить на
работу в фирму ISD. Они составлены не в форме тестовых вопросов,
предполагающих выбор одной из нескольких альтернатив, но как открытые
вопросы, дающие возможность понаблюдать за ходом мысли испытуемого и
подталкивающие к дальнейшему, более глубокому обсуждению. При этом для
ответа, в большинстве ситуаций, испытуемому необходимо продемонстрировать
знания одновременно из нескольких тематических разделов. Часто вопросы
сформулированы в несколько провокационной форме. Они не предполагают
наличия простого ответа. Они призваны послужить поводом для некой
дискуссии, постепенно углубляющейся в заявленную в вопросе тематику.
Часть вопросов достаточно сложна, и предполагает наличие знаний по С++,
выходящих за рамки средних. Большинство из вопросов предполагает дальнейшее
развитие темы уточняющими вопросами типа: "Почему вы так считаете?",
"Чем вы обосновываете ваш ответ?", "Где (в каких ситуациях)
это может применяться?" и т.п.
Наилучшим способом подготовки к техническому интервью по С++ является решение
ВСЕХ заданий из ТРЕТЬЕГО (!) издания книги Б.Страуструпа "Язык
программирования С++".
|
 |