Главная » Просмотр файлов » Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)

Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 165

Файл №1160801 Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)) 165 страницаТ. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801) страница 1652019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 165)

Функции в определении класса при- сваивается атрибут ю г1на1, как в следующем примере: чтгтча1 чотб зетча1ое(тпт *а, тпт Ы: Если функция эе1ча1ее переопределяется в производном классе, то при каждом использовании имени зегча1ие для объекта производного класса будет использо- ваться последнее определение функции. Если определение класса должно использоваться только в качестве базового класса, а все объекты данных определяются в производных классах, то такис клас- сы называются абстрактными, Абстрактный класс можно определить как класс, содержащий чисто виртуальную функцию: чтгтча1 чо(д зетча1ое(тпт *а, тпт Ы 0: Ни олин экземпляр класса, содержащего чисто виртуальную функцию, не мо- жет быть объявлен.

Производный класс, содержащий чисто виртуальную функ- цию, должен переопределить ее, если он будет использоваться для создания объек- тов этого производного класса. Шаблоны. В языке С--ч- существует форма общей функции, называемая шаб- лоном. Синтаксис шаблона следующий: Севр1ате <с1азз паранетр типа> с1азз иня класса определение где определение — это либо определение класса, либо определение функции.

Шаблон ння класса<фактический тип> используется для описания объявления класса. Например, 1 йтпс1ыбе <зтгеаи П> 2 теир1ате <с1авв зтасхтуре, тпт ю ге> с1ава а11зтасх 3 ( рыЫ тс: зтасхтуре зто(з(те]: ] ; 4 а11зтасй«пц10> х; 5 411зтасх<ттоац20> у; 6 идтп() 598 Приложение. Обзоры языков 7 [х.вс9(41 = 7.5, 7/ целочислеиний пассив 5 у вор[4] - 7.5; 7/ вевес~вениий массив 9 соиС « х.4[9[41 « ' ' « у 4[9[41 « епб1: ) В строках 2-3 создается шаблон класса с именем а115(асК, у которого имеется параметр типа всасКСуре и целый параметр 5! 7Е.

Этот шаблон отводит память под дашгыс массива с именем в(9, размер которого равен в! Се, а тип — вСасКСуре. В строках 4-5 создается объект х класса 4115СасК, внутрсннсс представление которого— это целочисленный массив из 1О элементов, и объект у класса 4115(асК, представленный вещественным массивом из 20 элементов. В результате трансляции и выполнения этой программы получаем следующий вывод. Сообщения компилятора об ошибках'. ваир1е.сс !п гипс!сои П пС па!и [1' вапр1е.сс 7 нагп1по; [1оаС ог боише аввщпеб Со спсеоег баса Суое $ ехесисе 7 7.5 Предупреждение означает, что вещественное число 7.

5 было преобразовано к целому числу при его присваивании переменной х. 559[4), а при присваивании переменной у 5(9[41 опо оставалось всп[дственнгям. Представление объектов в памяти Объекты класса могут быть представлены в памяти так жс, как и объекты структуры 5СгисС. Вызов метода с1аввоЬ)есС.!пеСПобпалсе[параиетр) на самом деле транслируется в процессе компиляции в следующую запись: с!аввпаве: иеснобпаие[ас!аввообесС. паоането) Единственная сложность возникает, когда вызыва!отея виртуальныс функции, поскольку реальная функция, которую необходимо вызвать, может быть переопределена в производном классе. Лля разрешения этой проблемы необходимо только сохранить таблицу переходов в объекте класса для каждой наследуемой виртуальной функции.

Если опа обновляется для каждой новой виртуальной функции в производном классе, то этот обьскт данных всегда будет указывать па текущую виртуальную функцию, которую необходимо вызвать. П.3.2. Управление последовательностью действий Язык С++ содержит тс жс операторы, что и язык С. В С++ добавлена обработка исключительпь!х ситуаций, хотя пс каждый транслятор С++ обеспечивает зту возможность. Выражения Выражения языка С++ те же, что и в язьгкс С. Эти сообшсния появится при использовании комииля гора Сел в гигтемс!7Х!Х, ири непале~овации лругиго копнили гора С г К ~ми ример фирмы Миговой пля системм Свг1 обоих, их ис булст — Причеч. кауч. ред.

Операторы Все операторы языка С можно использовать в языке С-ь+. Параметры функций по умолчанию. Параметры функций могут иметь значения по умолчанию, которые задаются их простой инициализацией в определениях функций. Например, функция щутцпсыоп (тпт а; тпт ь - /): может быть вызвана как ву/цпсс) оп(5, 12), при этом значения переменных будут а = 5иЬ = 12;иликакву/цпсстоп(б),тогдазначенияпеременныхбудут:а 6,Ь - У. Параметры перечисляются в таком порядке, чтобы параметры, имеющие значения по умолчанию, располагались справа.

(Заметим, что эта конструкция потенциально опасна, особенно если программа содержит имена перегруженных функций с различными списками параметров. Во избежание осложнений следует избегать данного способа вызова функций.) Оператор сгу. Оператор тгу используется для обработки программно-определенных исключительных ситуаций: тту ( оператор,; оператор,: (Г условие искпючения(титан иня искпючения). ) сатси(иня исключения)( // Обработка иснлючитепьной ситуации ) // конец искпючитепьнои ситуации Внутри любой процедуры, содержащей блок ггу, генерирование исключения оператором 1Ьгоы приводит к выполнению соответствующего оператора са ьсЬ. После этого процедура завершается. Операторы са(сЬ (которые являются определениями перегруженной функции) проверяются по очереди, пока не будет обнаружено совпадение с соответствующим оператором 1Ьгоы.

Например, тцгоы "Зто данные с оюибкаии." может быть выявлен следующим обработчиком: са(сц (сваг "Е гог5(гтпр) ( / *Обработка искпючения */ ) Ввод и вывод Входные и выходные потоки определены как стандартный набор функций. Функции соцс и с1 и и родственные нм функции описаны в следующем разделе. Перегрузка.

В языке С++ две функции могут быть перегруженными (то есть иметь одно и то же имя), если они имеют различные сигнатуры. Например, тпт Му(нос(топ(тпт а, тпт Ь) (. .). // Функция А тп( Му(нос(топ(тпт а) (...); // Функция В представляют две различные функции А и В. Если в программе дважды определено имя функции, С++ делает следующее. 1.

Если сигнатуры полностью совпадают, вторая функция будет восприниматьсяся как переопределение первой. 600 Приложение, Обзоры языков 2. Если аргументы совпадают, а возврашаемые значения нет, то вторая функция воспринимается как ошибка. 3. Если аргументы нс совпадают, функции рассматриваются как перегруженные. Символы операций также могут быть перегружень( в определении класса путем определения функции, начинаюп(ейся со слова орега1ог, за которым следует перегруженный символ. Например, функция + для возврата первого символа строки может быть определена следующим образом; ()дпс)пае хд(геап П> с1а55 гклпд (риЫ (с. спдг орегатог+О (гегогп 5(9[0]:): спдг 559[4].

): еа1п() (Глдпд х: х.559="апс"; соШ « "ршпг х[0], " -х « еп01:) где первый аргумент — экземпляр класса ГЬ) пд. Данная программа осуществит следую(ций вывод: рг1п( х[0]; а Бинарный вариант операции сраг для + будет иметь сигнатуру сваг орегагог+((Шпд дтшпд) ... и к компонентам второго аргумента можно обращаться как 5гг( пд. 559. К первому аргументу можно обращаться как Ь))) 5 -а 559. Сигнатура перегруженных операций должна быть совместима с сигнатурой их стандартных функциональных возможностей. Таким образом, + может быть унарным или бинарным, но!, например, может быть только унарным. Перегруженная операция,такая как [Шпд ба[а + )п5 Ьата,должнабытьопределена внутри класса ГЬ)пд 0а[а как функция с аргументом ) п( ба[а.

Таким образом, левый аргумент бинарной операции определяет класс, который содержит определение функции. В приведенном примере класс [Ь) пд содержит функцию орегагог+ ((пг х)(...) чтобы написать функцию дп[ ()ага -[ь) пд 0ага, необходимо иметь функцию, в которую передается ар(умент класса ЬЬдпд, примененный к классу )п~. Однако тип ) пЬ является встроенным. Эту проблему можно решить, если определить функцию как дружественный класс ((г)еп()) в определении класса ььдпд: Ггдепп орегаъьг+ (апг х, гшпд у)(...) Однако в любом случае по крайней мере один аргумент у операции + должен быть из класса, определенного пользователем.

Неявные преобразования. Конструкция орегагог может быть использована для неявного преобразования типов. Пусть у нас задан объект класса 5Ь1 пд. Конструкция драга(ог гураО ( ге[игл ... ) будет вызываться всегда, когда используется объект класса ФЬ1пд, а требуется объект типа Ьуре.

Если добавить в опрелеление класса гь) пд следующую строку: прага(пг сваг() ( ге(пгп 559[0] ) то следующая функция будет иметь такое же действие, что и предыдущая перегруженная операция ь: па1п() (Гпдпд х х 559 - "аЬс" соШ "рюп( х[0]: " «(спаг) х «еп01,) П.4. ЕОРТРА[ч' 601 Стандартные функции Все функции языка С можно использовать в языке С+-Р. Кроме того, язык С++ содержит набор стандартных потоковых функций ввода-вывода, определенных в заголовочном файле Игеаш.П. Функция сои6 «)Ееа добавляет элемент )Ееи(в выходной поток. В одном операторе можно добавить несколько элементов, например, сооТ «Хбеи[, «)Те(А, Для добавления символа окончания строки и печати этой строки используется специальный элемент еп01.

Функция соОЕ.роЕ поместит аргумент, состоящий из одного символа, в выходной поток. Функция с[п считывает данные в свободном формате. с[п» а» Ь считывает первый элемент в переменную а, а второй в переменную Ь. Если требуется считать одиночный символ, это действие произведет функция с) п. деЕ (функция деЕ аналогична функции деЕОПаг из файла И([[о. П). Функция деТ[1пе( сПаг *Ь, )пт Ьзтге, сПаг Ое1ив = 'Хп') считываетблокиз не более чем Ьюхе-1 символов, сохраняет его в массиве Ь и добавляет в конец пиП- символ ХО.

Параметр пе[[А( определяет, какой последний символ считывать (обычно это символ конца строки Хп). Распределение памяти. Для распределения памяти в языке С++ нет необходимости использовать системную функцию пи11ос. В этот язык были добавлены функции пен и Ое! ете. Функция пеи иии типа размещает в памяти объект указанного типа и возвращает указатель на него. При вызове пеи иии класса объект указанного класса размещается в памяти и возвра(цается указатель на него.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6390
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее