Вопросы на собеседовании
PHP
C++ (ООП)
Базы данных
.NET
Некоторые распространенные вопросы на собеседовании для C++ программиста:
Что такое класс? Что такое объект? В чем разница?
Какие существуют модификаторы уровня доступа?
Что такое наследование?
Если мы наследуем класс, наследуются ли приватные поля (члены)?
Что означает модификатор virtual?
Что такое абстрактный класс. Можно ли создать экземпляр абстрактного класса?
Что такое инкапсуляция?
Что такое полиморфизм. Какими средствами языка он реализуется?
Что такое виртуальный деструктор?
Что такое виртуальный конструктор?
Оставить комментарий
Что такое ООП?
Что такое класс? Что такое объект? В чем разница?
Какие существуют модификаторы уровня доступа?
Что такое наследование?
Если мы наследуем класс, наследуются ли приватные поля (члены)?
Что означает модификатор virtual?
Приведем пример:
Пусть имеется базовый класс base, от которого наследуется производный класс derived
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class base { public: void func(void) { cout << "Вызван метод базового класса base\n"; return; } }; class derived: public base { public: void func(void) { cout << "Вызван метод производного класса derived\n"; return; } }; |
Теперь посмотрим на следующий код:
base *p; // объявляем указатель на базовый класс base derived d_ob; p=&d_ob; //указателю присваиваем адрес объекта производного класса derived p->func(); //вызываем метод
В результате выполнения кода получим:
Вызван метод базового класса base
Здесь мы присвоили указателю адрес объекта производного класса, но при вызове метода func выполняется код из метода базового класса base. Если же мы объявим в базовом классе виртуальный метод, то компилятор во время выполнения вызовет метод адресуемого объекта.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class base { public: virtual void func(void) { cout << "Вызван метод базового класса base\n"; return; } }; class derived: public base { public: void func(void) { cout << "Вызван метод производного класса derived\n"; return; } }; |
Теперь в результате выполнения кода получим:
Вызван метод производного класса derived
Что такое абстрактный класс. Можно ли создать экземпляр абстрактного класса?
Что такое инкапсуляция?
Что такое полиморфизм. Какими средствами языка он реализуется?
Что такое виртуальный деструктор?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class base { public: ~base() { cout << "Вызван деструктор базового класса base\n"; } }; class derived: public base { public: ~derived() { cout << "Вызван деструктор производного класса derived\n"; } }; |
Теперь, выполним следующий код:
1 2 3 4 5 | base *p; // объявляем указатель на базовый класс base derived d_ob; p=new derived(); // присваиваем указателю адрес объекта производного объекта derived delete p; // удаляем объект, на который ссылается указатель return 0; |
Что такое виртуальный конструктор?
|
|
0 | Tweet | Нравится |
|
На этот раздел с вопросами оставлено 22 комментария
-
-
spike
29 Август 2010 14:22:45 (ссылка)Вы уверены в этом? Просто где ни читал везде пишут что нет=(
В общем случае получаем один и тот же смысл, в обоих случаю использовать члены нельзя, но все-же хотелось бы конкретики! Пожалуйста выложите сайт(укажите книгу) откуда такие сведения?) Заранее спасибо! -
serj
05 Октябрь 2010 20:44:32 (ссылка)А зачем вам где-то читать об этом? Что означает слово "наследуется"? Если оно означает, что поле присутствует физически внутри объекта, занимает память, инициализируется при помощи конструктора и удаляется деструктором, то наследуются все поля, включая приватные. А если под "наследуется" подразумевается именно доступность поля в коде, тогда не наследуется. На мой взгляд правильней первый вариант.
-
-
-
-
-
-
-
Сергей
12 Октябрь 2011 01:04:29 (ссылка)У меня на собеседовании такой ответ не будет засчитан.
Вопрос имеет подвох, хоть его автор, наверняка, этого не заметил. Понимание сути происходящего - необходимое требование к любому низкоуровневому программисту.
---
1) Модификаторы доступа модифицируют доступ. Наследуется все, кроме переопределенных виртуальных методов.
2) Приватные данные базового класса не доступны на прямую в наследнике, но доступны через открытые и защищенные методы базового класса. Более того, через public методы они могут быть доступны и всем окружающим. Дальше можно не продолжать.
Можно трактовать спецификацию как угодно, но главное - понимание сути. А суть такова, что данные базового класса так или иначе присутствуют в производном, не зависимо от модификатора доступа и наследования.
99% всего ОО Проектирования вертится вокруг того, что производный класс(при открытом наследовании) одновременно является и базовым.
Пишу исключительно, чтобы осветить тему. Никакого негатива.
---
Системный архитектор, Москва -
Deimos
23 Июнь 2010 10:09:29 (ссылка)Сколько лишних и бестолковых слов...
Объектно-ориентированное программирование — это новый подход к созданию программ. ООП использует лучшие идеи, воплощенные в структурном программировании, и сочетает их с мощными новыми концепциями, которые позволяют оптимально организовывать ваши программы.
Из 30 слов здесь воды - как минимум штук 10.
Далее, полимирфизм - это куда более широкое понятие, чем та трактовка, которая используется в ООП (www.rsdn.ru)
-
admin
23 Июнь 2010 15:19:48 (ссылка)Это всего лишь краткие ответы на вопросы, которые задают на собеседовании. Они служат для того, чтобы человек вспомнил, что вообще говорить по данному вопросу, развил то, что написано.
Про ООП можно написать объемную статью. И где здесь в ответе на вопрос Вы видите воду?
>полимирфизм - это куда более широкое понятие, чем та трактовка, которая используется в ООП
Эмм... А какой еще полиморфизм Вы имеете ввиду? Здесь выложены вопросы по ООП, логично предположить, что полиморфизм будет рассматриваться именно с этой стороны.
-
Deimos
23 Июнь 2010 17:40:34 (ссылка)Да, после повторного прочтения статьи с учётом комментария соглашусь, что статья - больше пометки на полях, притом скорее для впервые ищущего работу. Хотя, честно говоря, сегодня про ООП чаще спрашивают всё же в контексте других языков. Полная ссылка на статью почему-то была сгрызена, когда я оставлял комментарий.
-
admin
23 Июнь 2010 18:19:55 (ссылка)Насчет того, что это для тех, кто впервые ищет работу - позволю не согласиться. Такие вопросы задают, даже, если у соискателя опыт более 5 лет. Знаю лично по себе. Это некая шпаргалка, которую удалось составить, благодаря опыту людей, проходивших собеседование по C++.
Собраны самые частые вопросы, которые встречаются почти везде.
>> Хотя, честно говоря, сегодня про ООП чаще спрашивают всё же в контексте других языков.
Не только. Часто просят рассказать просто про саму парадигму ООП.
-
-
-
RDS
17 Январь 2011 18:30:16 (ссылка)Вот хорошая книга по ООП, там рассказывается и про простой и про сложный полиморфизм - Г.С.Иванова, Т.Н.Ничушкина, Е.К.Пугачев Объектно-ореинтированое программирование. После прочтения этой книги, многое встанет на свои места, и в дальнейшем легче станет изучать и понимать ОО-языки
-
-
-
-
-






