Главная Обратная связь Поможем написать вашу работу!

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Обработка исключительных ситуаций



Основы программирования

Вопросы для подготовки к коллоквиуму

Курс, весна, 2014-2015

Введение в ООП.

Инкапсуляция. Полиморфизм. Наследование.Основы понятия класса. Общий формат объявления класса. Доступ к членам класса. Конструкторы и деструкторы. Конструкторы с параметрами.Введение в наследование. Указатели на объекты. Присваивание объектов. Передача объектов функциям. Объекты в качестве возвращаемого значения функцией. Дружественные функции (обзор). Массивы объектов. Указатель THIS. Операторы NEW и DELETE.

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. В определении класса члены класса с ключевым словом private доступны:

a) любой функции программы;



b) в случае, если вам известен пароль;

c) методам этого класса;

d) только открытым членам класса.

 

21. Напишите определение класса Leverage, включающего одно закрытое поле типа int с именем crowbar и одним открытым методом с прототипом void pry().

 

22. Напишите оператор, создающий объект lever1 класса Leverage, описанного в вопросе 21.

 

23. Операция точки (операция доступа к члену класса) объединяет следующие два элемента (слева направо):

a) член класса и объект класса;

b) объект класса и класс;

c) класс и член этого класса;

d) объект класса и член этого класса.

 

24. Напишите оператор, который вызовет метод pry() объекта lever1(см. вопросы 21 и 22).

 

25. Методы класса, определенные внутри класса, по умолчанию становятся _________, ________ .

 

26. Напишите метод getcrow() для класса Leverage (см. вопрос 21), который будет возвращать значение поля crowbar. Метод следует определить внутри определения класса.

27. Конструктор вызывается автоматически в момент______________ объекта.

28. Имя конструктора совпадает с именем_____________ .

29. Напишите конструктор, который инициализирует нулевым значением поле crowbar класса Leverage (см. вопрос 21). Конструктор следует определить внутри определения класса.

30. Верно или неверно следующее утверждение: класс может иметь более одного конструктора с одним и тем же именем?



 

31. Методу класса всегда доступны данные:

a) объекта, членом которого он является;

b) класса, членом которого он является;

c) любого объекта класса, членом которого он является;

d) класса, объявленного открытым.

 

32. Предполагая, что метод getcrow(), описанный в вопросе 29, определен вне класса, объявите этот метод внутри класса.

 

33. Единственным формальным различием между структурами и классами в С++ является то, что_______________.

 

34. Пусть определены три объекта класса. Сколько копий полей класса содержится в памяти? Сколько копий методов функций?

 

35. Классы полезны потому, что:

a) не занимают памяти, если не используются;

b) защищают свои данные от доступа со стороны других классов;

c) собирают вместе все аспекты, касающиеся отдельной вещи;

d) адекватно моделируют объекты реального мира.

 

36. Константный метод, вызванный для объекта класса:

a) может изменять как неконстантные, так и константные поля;

b) может изменять только неконстантные поля;

c) может изменять только константные поля;

d) не может изменять как неконстантные, так и константные поля.

 

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

 

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

 

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

 

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

 

41. Продолжительность жизни переменной, которая является:

a) локальной по отношению к методу, совпадает с продолжительностью жизни функции;



b) глобальной, совпадает с продолжительностью жизни класса;

c) нестатическим компонентным данным объекта, совпадает с продолжительностью жизни объекта;

d) статической внутри метода, совпадает с продолжительностью жизни этой функции.

 

42. Истинно ли утверждение о том, что возврат по значению локальной переменной метода не создает никаких проблем?

 

43. Если в заданном классе переменная da является компонентными данными,присвоит ли выражение this.da=37; значение 37 переменной da?

 

44. Напишите выражение, с помощью которого функция может возвращать весь объект, методом которого она является, без создания временных объектов.

 

Введение в перегрузку операторов.

 

Перегрузка функций. Перегрузка конструкторов. Конструктор копирования. . Перегрузка и неоднозначность. Основы перегрузки операторов. Дружественные оператор-функции.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

28. .Перегрузка операций:

a) преобразовывает операции(operator) C++ для работы с объектами;

b) предоставляет операциям C++ больше, чем они могут обработать;

c) дает новое значение существующим в C++ операциям;

d) создает новые операции C++.

 

29. Предположим, что класс X не использует перегруженные операции. Напишите выражение, в котором вычитается объект x1 класса X из другого объекта x2 этого же класса. Результат помещается в x3.

 

30. Предположим, что класс X включает в себя процедуру перегрузки операции -. Напишите выражение, которое будет выполнять те же действия, что и выражение, описанное в вопросе 2.

31. Истинно ли следующее утверждение: операция >= может быть перегружена?

 

32. Сколько аргументов требуется для определения перегруженной унарной операции

 

33. Предположим, что существует класс C с объектами obj1, obj2 и obj3. Выражение obj3=obj1-obj2 работает правильно. Здесь перегруженная операция должна:

a) принимать два аргумента;

b) возвращать значение;

c) создавать именованный временный объект;

d) использовать объект, вызвавший операцию, как операнд.

 

34. Чем отличается действие перегруженной операции ++ при ее использовании в префиксной форме от использования в постфиксной форме?

 

35. Вот два объявления, предназначенные для складывания двух объектов класса String:

void add (String s1, string s2)

String operator + (String s)

 

Рассмотрим, какие из элементов первого объявления соответствуют элементам второго. Заполните пробелы подходящими вариантами:

· Имени функции (add) соответствует_________ .

· Возвращаемому значению (типа void) соответствует________ .

· Первому аргументу (s1) соответствует__________ .

· Второму аргументу (s2) соответствует____________ .

· Объекту, вызвавшему функцию, соответствует___________.

 

a) аргумент (s);

b) объект, вызывающий операцию;

c) операция (+);

d) возвращаемое значение (типа String);

e) нет соответствия для этого элемента.

 

36. Истинно ли следующее утверждение: перегруженная операция всегда требует на один аргумент меньше, чем количество операндов?

 

37. Когда вы перегружаете операцию арифметического присваивания, то результат:

a) передается объекту справа от операции;

b) передается объекту слева от операции;

c) передается объекту, вызвавшему операцию;

d) должен быть возвращен.

 

38. Истинно ли следующее утверждение: выражение objA=objB будет причиной ошибки компилятора, если объекты разных типов?

 

39. Истинно ли утверждение о том, что дружественная функция имеет доступ к скрытым данным класса, даже не являясь его методом?

 

40. Дружественная функция может быть использована для того, чтобы:

a) разные классы могли пользоваться одними аргументами;

b) разрешать доступ к классам, исходный код которых недоступен;

c) разрешать доступ к несвязанному классу;

d) увеличить многосторонность применения перегружаемой операции.

 

41. Напишите описатель дружественной функции harry(), возвращающей результат типа void и имеющей один аргумент класса george.

 

42. Ключевое слово friend появляется в:

a) классе, разрешающем доступ к другому классу;

b) классе, требующем доступа к другому классу;

c) разделе скрытых компонентов класса;

d) разделе общедоступных компонентов класса.

 

43. Статическая функция:

a) должна вызываться, когда объект уничтожается;

b) сильно связана с индивидуальным объектом класса;

c) может быть вызвана с использованием имени класса и имени функции;

d) используется для создания простого объекта.

 

44. Объясните, что делает по умолчанию оператор присваивания = в применении к объектам.

 

45. Оператор присваивания может быть перегружен с целью:

a) хранения информации о количестве одинаковых объектов;

b) присваивания идентификационного номера каждому объекту;

c) проверки того, что все компонентные данные скопировались без ошибок;

d) уведомления о том, что имело место присваивание.

 

46. Операции, выполняемые оператором присваивания и конструктором копирования:

a) похожи, за исключением того, что конструктор копирования создает новый объект;

b) похожи, за исключением того, что оператор присваивания копирует компонентные данные;

c) различны, за исключением того, что оба создают новый объект;

d) различны, за исключением того, что оба копируют компонентные данные.

 

47. Истинно ли утверждение о том, что конструктор копирования может быть переопределен с целью копирования только части данных объекта?

 

48. Объясните разницу в выполнении следующих двух выражений:

person p1(p0);

person p1 = p0;

 

49. Конструктор копирования запускается, когда:

a) функция возвращается по значению;

b) аргумент передается по значению;

c) функция возвращается по ссылке;

d) аргумент передается по ссылке.

 

 

Введение в наследование.

 

Управление доступом к базовому классу. Защищенные члены класса. Конструкторы, деструкторы и наследование. Множественное наследование. Виртуальные базовые классы. Виртуальные функции. Указатели на производные классы. Знакомство с виртуальными функциями. Применение полиморфизма.

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. Назначение наследования состоит в том, чтобы:

a) создавать более общие классы в более специализированных;

b) передавать аргументы объектам классов;

c) добавлять возможности к существующим классам без их модифика- ции;

d) улучшать сокрытие данных и их инкапсуляцию.

 

24. Класс-наследник называется_______ от базового класса.

 

25. Преимущество использования наследования заключается в:

a) обеспечении развития класса путем естественного отбора;

b) облегчении создания классов;

c) избежании переписывания кода;

d) предоставлении полезной концептуальной основы.

 

26. Напишите первую строку описания класса Bosworth, который является public-производным класса Alphonso.

 

27. Будет ли правильным утверждение: создание производного класса требует коренных изменений в базовом классе?

 

28. Члены базового класса для доступа к ним методов производного класса должны быть объявлены как public или_________ .

 

29. Пусть базовый класс содержит метод basefunc(), а производный класс не имеет метода с таким именем. Может ли объект производного класса иметь доступ к методу basefunc()?

 

30. Допустим, что класс, описанный в вопросе 4, и класс Alphonso содержат метод alfunc(). Напишите выражение, позволяющее объекту BosworthObj класса Bosworth получить доступ к методу alfunc().

 

31. Истинно ли следующее утверждение: если конструктор производного класса не определен, то объекты этого класса будут использовать конструкторы базового класса?

 

32. Допустим, что базовый и производный классы включают в себя методы с одинаковыми именами. Какой из методов будет вызван объектом производного класса, если не использована операция разрешения имени?

 

33. Напишите объявление конструктора без аргументов для производного класса Bosworth из вопроса 4, который будет вызывать конструктор без ар- гументов класса Alphonso.

 

34. Оператор разрешения обычно:

a) ограничивает видимость переменных для определенных методов;

b) обозначает, от какого базового класса создан производный;

c) определяет отдельный класс;

d) разрешает неопределенности.

 

35. Истинно ли следующее утверждение: иногда полезно создать класс, объектов которого никогда не будет создано?

 

36. Предположим, что существует класс Derv, производный от базового класса Base. Напишите объявление конструктора производного класса, принимающего один аргумент и передающего его в конструктор базового класса.

 

37. Предположим, что класс Derv является частным производным класса Base. Мы определяем объект класса Derv, расположенный в функции main(). Через него мы можем получить доступ к:

a) членам класса Derv, объявленным как public;

b) членам класса Derv, объявленным как protected;

c) членам класса Derv, объявленным как private;

d) членам класса Base, объявленным как public;

e) членам класса Base, объявленным как protected;

f) членам класса Base, объявленным как private.

 

38. Истинно ли следующее утверждение: класс D может быть производным класса C, который в свою очередь является производным класса B, который производный класса A?

 

39. Иерархия классов:

a) показывает те же взаимоотношения, что и схема организации;

b) описывает взаимоотношение типа «имеет»;

c) описывает взаимоотношения типа «является частью»;

d) показывает те же взаимоотношения, что и наследственное дерево.

 

40. Предположим, что класс Derv является производным класса Base. Оба класса содержат метод func() без аргументов. Напишите выражение, входящее в метод класса Derv, которое вызывает метод func() базового класса.

 

41. Истинно ли следующее утверждение: невозможно сделать объект одного класса, членом, другого класса?

 

42. Виртуальные функции позволяют:

a) создавать массивы типа «указатель на базовый класс», которые могут содержать указатели на производные классы;

b) создавать функции, к которым никогда не будет доступа;

c) группировать объекты разных классов так, чтобы они все были доступны с помощью одного и того же вызова функции;

d) использовать один и тот же вызов функции для выполнения методов объектов, принадлежащих разным классам.

 

43. Истинно ли утверждение о том, что указатель на базовый класс может ссылаться на объекты порожденного класса?

 

44. Пусть указатель р ссылается на объекты базового класса и содержит адрес объекта порожденного класса. Пусть в обоих этих классах имеется невиртуальный метод ding(). Тогда выражение p->ding(); поставит на выполнение версию функции ding() из__________класса.

 

45. Напишите описатель для виртуальной функции dang(), возвращающей результат типа void и имеющей аргумент типа int.

 

46. Принятие решения о том, какая именно функция будет выполняться по конкретному вызову функции, называется___________________.

 

47. Пусть указатель р ссылается на объекты базового класса и содержит адрес объекта порожденного класса. Пусть в обоих этих классах имеется виртуальный метод ding(). Тогда выражение p->ding(); поставит на выполнение версию функции ding() из_____________ класса.

 

48. Напишите описатель чистой виртуальной функции aragorn, не возвращающей значений и не имеющей аргументов.

 

49. Чистая виртуальная функция — это виртуальная функция, которая:

a) делает свой класс абстрактным;

b) не возвращает результата;

c) используется в базовом классе;

d) не имеет аргументов.

 

50. Напишите определение массива parr, содержащего 10 указателей на объекты класса dong.

 

51. Абстрактный класс используется, когда:

a) не планируется создавать порожденные классы;

b) есть несколько связей между двумя порожденными классами;

c) с его помощью запрещено создавать какие-либо объекты;

d) вы хотите отложить объявление класса.

 

Обработка исключительных ситуаций.

Общий механизм обработки исключений. Синтаксис исключений. Перехват исключений. Список исключений функции. Исключения в конструкторах и деструкторах. Иерархии исключений

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Шаблоны классов.

Шаблоны функций. Шаблоны классов: создание, использование и специализация. Достоинства и недостатки шаблонов.


Просмотров 2512

Эта страница нарушает авторские права




allrefrs.ru - 2021 год. Все права принадлежат их авторам!