Динамический полиморфизм

Программирование

Вопросы для подготовки к экзамену

Курс, весна, 2012-2013

Классы

1. Что определяет класс? Чем обличается класс от объекта?

2. Можно ли объявлять массив объектов? А массив классов?

3. Разрешается ли объявлять указатель на объект? А указатель на класс?

4. Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?

5. Как называется использование объекта одного класса в качестве поля другого класса?

6. Является ли структура классом? Чем класс отличается от структуры?

7. Объясните принцип инкапсуляции.

8. Что такое композиция?

9. Для чего используются ключевые слова public и private?

10. Можно ли использовать ключевые слова public и private в структуре?

11. Существуют ли ограничения на использование public и private в классе? А в структуре?

12. Обязательно ли делать поля класса приватными?

13. Что такое метод? Как вызывается метод?

14. Может ли метод быть приватный?

15. Как определить метод непосредственно внутри класса? А вне класса? Чем эти определения отличаются?

16. Можно в методах присваивать параметрам значения по умолчанию?

17. Что обозначается ключевым словом this?

18. Зачем нужны константные методы? Чем отличается определение константного метода от обычного?

19. Может ли константный метод вызываться для объектов-переменных? А обычный метод — для объектов-констант?

20. Объясните принцип полиморфизма.

21. Сколько места в памяти занимает объект класса? Как это узнать?

22. Влияют ли методы на размер объекта?

23. Одинаков ли размер класса и аналогичной структуры?

24. Какие операции нельзя перегружать? Как вы думаете, почему?

25. Можно ли перегружать операции для встроенных типов данных?

26. Можно ли при перегрузке изменить приоритет операции?

27. Можно ли определить новую операцию?

28. Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?

29. Какой результат должны возвращать операции с присваиванием?

30. Как различаются перегруженная префиксная и постфиксная операции инкремента и декремента?

31. Что означает выражение *this? В каких случаях оно используется?

32. Какие операции разрешается перегружать только как методы класса?

33. Дайте определение дружественной функции. Как объявляется дружественная функция? А как определяется?

34. Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.

35. Сколько конструкторов может быть в классе? Допускается ли перегрузка конструкторов? Какие виды конструкторов создаются по умолчанию?

36. Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?

37. Приведите несколько случаев, когда конструктор вызывается неявно.

38. Как проинициализировать динамическую переменную?

39. Как объявить константу в классе? Можно ли объявить дробную константу?

40. Каким образом разрешается инициализировать константные поля в классе?

41. В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?

42. Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам массива начальные значения?

43. Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?

44. Для чего нужны статические поля в классе? Как они определяются?

45. Как объявить в классе и проинициализировать статический константный массив?

46. Что такое деструктор? Может ли деструктор иметь параметры?

47. Допускается ли перегрузка деструкторов?

48. Что такое «глубокое копирование» и когда в нем возникает необходимость?

49. Какое копирование осуществляет стандартный конструктор копирования?

50. Чем отличается копирование от присваивания?

51. Объясните, почему в операции присваивания требуется проверка присваивания самому себе?

52. Можно ли в качестве операции индексирования использовать операцию вызова функции ()? В чем ее преимущества перед операцией []?

Динамический полиморфизм

1. Какие две роли выполняет наследование?

2. Какие виды наследования возможны в С++?

3. Чем отличается модификатор доступа protected от модификаторов private и public?

4. Чем открытое наследование отличается от закрытого и защищенного?

5. Какие функции не наследуются?

6. Сформулируйте правила написания конструкторов в производном классе.

7. Каков порядок вызова конструкторов? А деструкторов?

8. Можно ли в производном классе объявлять новые поля? А методы?

9. Если имя нового поля совпадает с именем унаследованного, то каким образом разрешить конфликт имен?

10. Что происходит, если имя метода-наследника совпадает с именем базового метода?

11. Объясните, зачем нужны виртуальные функции.

12. Что такое связывание?

13. Чем «раннее» связывание отличается от «позднего»?

14. Дайте определение полиморфного класса.

15. Может ли виртуальная функция быть дружественной функцией класса?

16. Наследуются ли виртуальные функции?

17. Каковы особенности вызова виртуальных функций в конструкторах и деструкторах?

18. Можно ли сделать виртуальной перегруженную операцию, например, сложение?

19. Может ли конструктор быть виртуальным? А деструктор?

20. Как виртуальные функции влияют на размер класса?

21. Как объявляется «чистая» виртуальная функция?

22. Дайте определение абстрактного класса.

23. Наследуются ли чистые виртуальные функции?

24. Можно ли объявить деструктор чисто виртуальным?

25. Чем отличается чистый виртуальный деструктор от чистой виртуальной функции? /

26. Зачем требуется определение чистого виртуального деструктора?

Исключения

1. Назовите ключевые слова С++, которые используются для обработки исключений.

2. Каким образом исключение генерируется?

3. Каковы функции контролируемого блока?

4. Что обозначается ключевым словом catch?

5. Какого типа может быть исключение?

6. Сколько параметров разрешается писать в заголовке секции-ловушки?

7. Какими способами разрешается передавать исключение в блок обработки?

8. Объясните, каким образом преодолеть ограничение на передачу единственного параметра в блок обработки.

9. Напишите конструкцию, которая позволяет перехватить любое исключение.

10. Перечислите возможные способы выхода из блока обработки.

11. Каким образом исключение «передать дальше»?

12. Что такое «спецификация исключений»?

13. Что происходит, если функция нарушает спецификацию исключений?

14. Учитывается ли спецификация исключений при перегрузке функций?

15. Что такое «иерархия исключений»?

16. Существуют ли стандартные исключения? Назовите два-три типа стандартных исключений.

17. Поясните «взаимоотношение» исключений и деструкторов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: