|
Программирование >> Структурное программирование
b) Ключевое слово вводит определение перегруженной функции-операции. c) Для использования операций над объектами класса они должны быть перегружены за исключением операций и . d) и операции не могут изменяться при ее перегрузке. 8.2 Объясните множество значений операций и в С++. 8.3 В каком контексте в С++ могло бы быть использовано имя operator/? 8.4 Верно или нет, что в С++ можно перегружать только суш;ествующие операции? 8.5 В каком соотношении находятся старшинство перегруженных и старшинство исходных операций? Ответы на упражнения для самопроверки 8.1 а) перегрузки операций. Ь) operator, с) присваивания (=), адресации (&). d) Старшинство, ассоциативность. 8.2 Операция в зависимости от ее контекста может быть и операцией сдвига вправо, и операцией взять из потока. Операция в зависимости от ее контекста может быть и операцией сдвига влево, и операцией поместить в поток. 8.3 При перегрузке операций: это могло бы быть имя функции, которая обеспечивает новую версию операции /. 8.4 Верно. 8.5 Они идентичны. Упражнения 8.6 Дайте ряд примеров неявной перегрузки операций в С. Дайте ряд примеров неявной перегрузки операций в С++. Дайте убедительный пример ситуации, когда вы хотели бы явно перегрузить операцию в С++. 8.7 В С++ нельзя перегружать операции , , , и . 8.8 Сцепление строк требует двух операндов - двух строк, которые должны быть сцеплены. Мы показали в тексте, как реализовать перегруженную операцию сцепления, которая подцепляет второй объект класса String справа к первому объекту класса String, изменяя при этом первый объект. В некоторых приложениях желательно создать сцепленный объект класса String, не изменяя ни одного из двух сцепляемых объектов. Реализуйте функцию operator+, способную выполнять такие операции как stringl = string2 + stringS; операции + использованы здесь в разных целей. Это пример 8.9 (Упражнение на перегрузку основных операций). Чтобы прочувствовать осторожность, с которой надо подходить к выбору операций для перегрузки, составьте список перегруженных операции С++ и для каждой из них перечислите их возможные значения. Сделайте то же самое для нескольких перечисленных ниже классов, изученных вами в этом курсе: a) Массив b) Стек c) Строка После того, как вы это сделаете, прокомментируйте, какие операции имеют значение для большинства классов. Какие операции представляются наименее важными для перегрузки? Какие операции представляются сомнительными? 8.10 Теперь подойдите к предыдуш;ей задаче с другой стороны. Составьте список перегруженных операции С++. Для каждой из них перечислите, какие варианты этих основных операций , как вам кажется, было бы полезно иметь. 8.11 (Проект) С++ - эволюционируюш;ий язык. Как и все новые языки он постоянно совершенствуется. Какие дополнительные операции вы бы рекомендовали добавить в С++ или в будуш;ий язык, подобный С++; эти операции должны поддерживать как процедурное, так и объектно-ориентированное программирование? Напишите тш,ательное обоснование. Вы могли бы попробовать послать ваши предложения в комитет ANSI по С++. 8.12 Прекрасным примером перегрузки операции вызова функции ( ) является возможность более обш;ей формы двойной индексации массива. Перегрузите операцию вызова функции так, чтобы вместо записи массива в виде chessBoard[row][column] можно было бы записывать альтернативную форму: chessBoard[row,column] 8.13 Перегрузите операцию индексации так, чтобы она возвраш;ала заданный элемент связного списка. 8.14 Перегрузите операцию индексации так, чтобы она возвращала наибольший элемент набора, второй наибольший, третий наибольший и т.д. 8.15 Рассмотрите класс Complex, показанный на рис.8.7. Класс позволяет работать с операциями над так называемыми комплексными числами. Они представляются в виде realPart + imaginaryPart*!, где i имеет значение корня квадратного из -1. a) Измените этот класс так, чтобы иметь возможность вводить и выводить комплексные числа посредством перегруженных операций и соответственно (вы должны заменить функцию печати класса). b) Перегрузите операцию умножения так, чтобы иметь возможность перемножать два комплексных числа, как в алгебре. >.g class Complex { public: Complex(double = 0.0, double = 0.0); конструктор Complex operator+(const Complex S) const; сложение Complex operator-(const Complex &) const; вычитание Complex &operator=(const Complex &); присваивание void print 0 const; печать private: double real; действительная часть double imaginary; мнимая часть ; #endif Рис. 8.7. Определение класса Complex {часть 1 из 5) COMPLEXl.СРР у/ Определения функций-элементов класса Complex #include <iostreara.h> #include complexl.h r> . Конструктор Complex::Complex(double r, double i) mm { real = r; imaginary = i; 1 ) ЩШш II Перегруженная операция сложения Complex Complex::operator+(const Complex &operand2) const .-SJ; Complex sum; J?? sum. real = real + operand2 . real; sum. imaginary = imaginary + operand2 . imaginary; return sum; Перегруженная операция вычитания Complex Complex::operator-(const Complex &operand2) const { Complex diff; Щ diff.real = real - operand2.real; diff.imaginary = imaginary - operand2.imaginary; return diff; с) Перегрузите операции == и != так, чтобы иметь возможность сравнивать два комплексных числа. COMPLEXl.H Определение класса Complex . i ttifndef C0MPLEX1 H ttdefine COMPLEXl H
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |