Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 32

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 32 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 322019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Например, если на входе было: аа ЬЬ ЬЬ аа аа 66 аа аа то программа выведет: аа б Ь6. 3 Несложно преобразовать нашу реализацию в подходящий тип ассоциативного массива с помощью шаблона класса с перегруженным оператором ~] (3 11.8). Еше проще воспользоваться типом тар из стандартной библиотеки Я 17А.1). 5.6. Указатель на)то!б Указатель на объект любого типа можно присвоить переменной типа ио!с(', один оо!с(* можно присвоить другому оо!с)", пару ооИ* можно сравнивать на равенгтво ц неравенство, и, наконец, ио!11* можно явно преобразовать в указатель на другой тпп.

Прочие операции могут оказаться опасными, потому что компилятор не знает, на какого сорта объект ссылается указатель ца самом деле. Поэтому другие операции вызывают сообщение об ошибке на этапе компиляции. Чтобы воспользоваться ио!с)*, мы должны явно преобразовать его в указатель определенного типа. Например; 5.7. Структуры воЫ ! (Ы1" рг] ( иоЫ' ри = рг, // правильно — неявное преобразование гнила О из гп1'в ооай О ошибка: нельзя разыяеновапгь иош' // ошибка нельзя произветпи инкреявнт воЫ' // (рознер лукпзываелгосоь ооьекта не известен) О явное преобразование в ггг1* гп1* рг2 = з1а11с саз1<гп1" ь(ри], доиИе* рс(1 = ри // оигибка агоггИе* рг12 = рг', // оиги бка доггЫе" рг!3 = з1а1»с сазг'доиЫе'»(ри], // небезопасно 1 Наличие ооЫ* па более высоких уровнях подозрительно и, скорее всего, является индикатором ошибки на этапе проектирования. Если ооЫ* используется для оптимизации, его можно скрыть за безопасным интерфейсом Я 13.5, э' 24,4,2).

Указатели на функции (5 7. г) и указатели на члены (э 155) не могут быть присвоены переменным типа ооЫ*. 5.7. Структуры Массивом называется набор элементов одинакового типа. Структура является набо- ром элементов (почти) произвольных типов. Например: зггисг аг!дсезз ( сЬаг* лате; !опу гп1 питбег, сЬаг" з1гее1; сЬаг." 1ошп, сЬаг зга1е(2], !огги ягр, !/Сбт !гапдуг //б! // "бои гб 51" 0 "Лев Ргоьшепсе" //'гу".Г // 7974 Как правило не безопасно использовать указатель, преобразованный (пли приведенный с полгощью функций ..

саз1) к типу, отличному от типа объекта, на который он указывает. Наприлгер, компилятор полагает, что для с(оиЫе отводится 8 бант. Если зто так, то можно получить странные результаты, когда рг ссылается на гп1, память под ко горый выделяется по другому. 11одобная форма явного преобразования типа традиционно небезопасна и некрасива. Соответственно, использованный в примере тип преобразования з1а11с сазг был спроектирован при разработке языка таким образом, чтобы явно напоминать об этом.

Основными применениями эоЫ* являются передача указателейг функциям, которым не позволено делать предположения о типе объектов, а равно возврат объектов лнеуточпепного типа» из функций. Чтобы воспользоваться таким объектом, необходимо явно преобразовать тнп указателя. Функцгги, использующие указатели ооЫ*, обычно сушествуют на самых нижних уровнях системы, где происходит работа с аппаратными ресурсами. Например: иои1 гпу а!!ос(изе гп], //выдегяеггг и баигп излови спегггг льноб кучи Глава 5. указатели, массивы и структуры 142 Эта запись определяет новгяй тип асИгеее (адрес), состоящий из элементов, которые необходимо знать для отправки письма.

Обратите внимание наточку с занято)1 в конце, Это одно из немногих мест в Се+, где после закрывающей фигурной скобки нужно ставить точку с запятой и повтому программисты имеют склонность забывать о ней. Переменные типа ассе)геех можно объявлять точно так же, как и другие переменные, а к конкретным члеиам обращаться с использованием оператора . (точка). Например: ио1аЩ и дбтеее ~ д; 1с).лате = "4ол11пас)у; 1с)литбег= б1, ) Формой записи, используемой при инициализации массивов, можно воспользовать- ся и для инициализации переменных структур.

Например: а~Ыгеее1т1= ( "Ят11атуу, 61, 'Зоий И", "Жеш Ргоииуепсе", ГЛ", 'Х), 7974 ), Впрочем, обычно лучше пользоваться конструктором Я 10.2.3). Обратите внимание, что 1сьз1ате нельзя инициализировать строкой 'ЛУ". Строки ограничены символом '~0'. Следовате.льно, "ЛУ" имеет три символа — на один больше, чем можно разместить в 1с).е1а1е. К объектам типа структуры часто обращаются через указатели, используя оператор -> (разыменование указателя на структуру).

Например: иолу ргтт ис1суг )ас)с)геее* р) сои1 «р->лите « '~п' «р->пот бег « ' ' «р-»тгее1 « "~П' «р- 1отп « '1л' «р->е1аге)у) «р — >е1а1е(1) «''«р ~хгр~ Если р — указатель, то р->и эквивалентно ('р).т. Объекты типа структуры можно присваивать, передавать в качестве аргументов и возврашать в качестве значений функций, Например: а<Ыгеее ситгел1; пдй еее еет ситгел1 )а~Ыгеее лех1) 1 шЫгесе ргео = ситтеп1; сиггел1 = пех1, ге1игл ргеи; ) Другие операторы, например сравнения (-" и!-), не определены. Пользователь мо- жет определить их сам (глава 11).

143 5.7. Структуры Размер объекта типа структуры нс обязательно равен сумме размеров его членов. Такое может произойти потому, что на многих машинах объекты определенных типов должны выравгснваться по аппаратно определяемым границам пли, по крайнеи мере, прп выполнении этих условий они обрабатываются значительно быстрее.

Например, целые числа должны начинаться на границе аппаратного слова. Говорят, что на таких машинах к объектам применено «выравниваниесн Это приводит к «дырам ь в структурах. Так на многих машинах в(яеоГ(асЫгевв( равен 24, а не 22, как можно было ожидать. Вы можете минимизировать неиспользуемое пространство отсортировав члены по размеру (начиная с наиболыпих). Однако, часто лучше упорядочивать члены из соображений читабельности, по размеру же сортировать только в случае жестких требований к оптимизации, Имя типа можно использовать немедленно после его появления, а не обязательно после завершения всего объявления. Например: // связь // предке(ущий //следиютий з1 еис1 Еий ( Е!п(г* ргеигоиз; Еий* зиссеззое; До полного завершения объявления структуры запрещается использовать ее цмя для объявления других объектов.

Например: згеисГЮо доосГ( ДГо уоосГ ГлетЬег; //оипгдкв: рекурсивное ос~ределение // список ойдет определен позднее з!гисГ ЕГе1, егсис1 ЕГлп( ЕГпй" рге, ЕГлй" зис; Е(зГ" тесл(гес об зГгис1 ЕГз1 ( Еий* ГГеаГГ, Использование Егх1в объяГшевип ЕГпп при отсутствии первого объявления ЕГя1 приведет к синтаксической ошибке. Илсенем типа структуры можно пользоваться до определения типа, пока не требуется знания имен членов нли размера структуры.

Например: //5 является Го~енин некоторого пГГнГв с(изз 5; ек1егп 5 и, 5П иоЫь (5(, 5* ГГ (5*(, Подобная запись является ошибкой, потому что компилятор не может определить разлгер Ло есооГГ. Для того чтобы два (пяи более) объекта типа структуры ссылазшсь друГ на друга, можно сначала объявГгть только имя типа. например: Глава 5. Указатели, массивы и структуры 144 Но многими подобными объявлениями нельзя пользоваться до тех пор, покатил 5 не определен; иоЫ !г (5* р) ( 5а, // оишбка: 5 не определен, а для выделения памяти // требуется знать его размер О ошибка; 5 не определен, а для возврата зна ~ения // требуется знать его размер О ошибка: 5 не определен, а для переда ш аргумента // требуется знать его размер // оитбка: 5 не определен и имя чл ена нвизвесгпно /'0; д (а); р- т=7; // правильно — указатель можно передать и ра змеев шть // ошибка: 5 не определен и имя члена неизвестно 5*а=б(р), д->т = 7, ) и!кис!ма! ( /' ...

*/); !п! и!а! (од аг' пате, згпшг агар Ьи!); В этом случае простое имя (вга1) есть нмя не структуры, а доступ к структуре должен осу- ществляться с использованием ключевого слова в(гис1. Сходным образом можно исполь- зовать в качестве префиксов для разрешения неоднозначности ключевые слова с!авв, ишоп Я В.82) пепит ((ь 4,8). Однако лучше избегать подобной перегрузки имен. 5.7.1. Эквивалентность типов Две структуры являются разнымн типами, даже если у ннх одинаковые члены. На- пример, и!кис!5! (!и!и;); з!сис! 52 ( !и! а; ); являются двумя различными типами, поэтому 51х; 52 у = х; //ошибка: несоответствие снипа Структуры также отличаются от фундаментальных типов, так что 51х; !си!=-х, //ошибка: несоответствие типа Каждая структура до.лжна иметь единственное определение в программе Я 9.2З).

5.8 Советы [1] Избегайте нетривиальной арифметики указателей; ~ 5.3. [2) При нимайтс специальные меры, чтобы не обратиться за границы массива; ~ 53,1. Структура является упрощенной формой класса (глава 10). В силу причин, уходяших корнями глубоко в предысторию С, разрешается объявлять структуру и не структуру с одинаковыми именами в одной н той же области видимости. Иапрнмер: 145 Раздел 5.9. Упражнения ]3] Пользуйтесь нулем (О) вместо МШ; 9 5.1.11. ]4] Пользуйтесь иес1ог и оа?аггау вместо встроенных массивов; 6 5.3.1.

]5] Пользуйтесь яМпд вместо массивов символов, ограниченных нулем; 9 5.3. 16] Старайтесь как можно реже пользоваться простымн ссылками в качестве аргументов функ11ий; 9 5.5. 17] Пользуйтесь ооЫ* только в коде низкого уровня; 6 5.6. 18] Избегайте нетривиальных литералов (кмагических чисел») в коде. Вместо этого определите и используйте символические константы; 9 4.8, 9 5А. 5.9. Упражнения 1. (*1) Напишите следующие объявления: указатель на символ, массив из 10 целых, ссылка на массив из десяти целых, указатель на массив символьных строк, указатель на указатель на символ, целая константа, указатель на целую константу, константный указатель па целое.

Проииицпализируйте все объекты. 2. (*1.5) Какие ограничения на типы указателей сйаг*, 1п1* и вой* существуют в вашей системе? Например, может ли (п1' иметь нечетное значение (подсказка: подумайте о выравнивании)? 3. ('1) При помощи 1урег(ег определите типы ипя(упед сЬаг, сопя1 ипя(упег( сЬаг, указатель на целое, указатель на указатель на сйаг, указатель на массив сйаг, массив из 7 указателей на целые числа, указатель на массив из 7 указателей на целые числа и массив из 8 массивов по 7 указателей на пелые. 4.

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

Тип файла
DJVU-файл
Размер
10,02 Mb
Тип материала
Высшее учебное заведение

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

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