ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 8) онлайн

Вопросы

Ответы на эти вопросы вы сможете найти и приложении Ж. 1. Перегрузка операций:

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

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

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

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

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

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

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

5. Запишите полное определение для перегруженной операции в классе Counter программы COUNTPP1, которая вместо увеличения счетчика умень- шает его.

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

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

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

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

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

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

8. Напишите полное определение перегруженной операции ++ для класса Distance из программы ENGLPLUS. Операция должна увеличивать на еди- ницу переменную класса feet, и при этом должно быть верным выраже- ние:

                dist++;

9. Повторите задание из вопроса 8, но так, чтобы стало возможным выпол- нение выражения

                dist2 = dist1++;

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

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

void add (String s1, string s2) String operator + (String s)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

14. Напишите полное определение перегруженной операции ++, которая рабо- тает с объектами класса String из примера STRPLUS и выполняет изменение шрифта операнда на прописные буквы. Вы можете использовать библио- течную функцию toupper() (заголовочный файл CCTYPE), принимающую в качестве аргумента символ, который надо изменить, и возвращающую уже измененный (или тот же, если изменение не нужно).

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

а)            встроенную операцию преобразования;

б)           конструктор с одним аргументом;

в)            перегруженную операцию =;

г)            операцию преобразования, являющуюся членом класса.

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

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

а)            встроенную операцию преобразования;

б)           конструктор с одним аргументом;

в)            перегруженную операцию =;

г)            операцию преобразования, являющуюся членом класса.

18. Истинно ли следующее утверждение: если вы определили конструктор, содержащий определение типа aclass obj=intvar;, вы также можете записать выражение типа obj=intvar;?

19. Если объект objA принадлежит классу A, объект objB принадлежит классу В, вы хотите записать objA=objB и поместить функцию преобразования в класс A, то какой тип процедуры преобразования вы можете использовать?

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

21. В диаграммах UML объединение возникает, когда:

а)            в одной программе существуют два класса;

б)           один класс происходит от другого;

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

г)            один из классов вызывает метод другого класса.

22. В UML поля классов называют____             , а методы классов называ- ют ____              .

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

24. Направленность от класса A к классу В означает, что:

а)            объект класса A может вызвать операцию объекта класса B;

б)           существует взаимоотношение между классом A и классом В;

в)            объекты могут переходить из класса A в класс В;

г)            сообщения из класса B получает класс A.

 

35