Главная » Просмотр файлов » Г. Шилтд - Самоучитель C++ (DJVU)

Г. Шилтд - Самоучитель C++ (DJVU) (1114955), страница 21

Файл №1114955 Г. Шилтд - Самоучитель C++ (DJVU) (Г. Шилтд - Самоучитель C++ (DJVU)) 21 страницаГ. Шилтд - Самоучитель C++ (DJVU) (1114955) страница 212019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Это означает, что ссылку, возвращаемую функцией Г(), уже нельзя использовать. Глава 4 . Массивы, указатели и ссылки Некоторые компиляторы С++ не позволяют возвращать ссылки на локальные переменные. Тем не менее, зта проблема может проявиться по-другому, например, когда память для объектов выделяется динамически. 3. В качестве возвращаемого значения функции ссылка может оказаться полезной при создании массива определенного типа — так называемого защищенного массива (Ьоипг(ед аггау).

Как вы знаете, в С и С++ контроль границ массива не производится. Следовательно, имеется вероятность при заполнении массива выйти за его границы. Однако в С++ можно создать класс массива с автоматическим контролем границ (автотпаг1с Ьоипдз сйес)г1пя). Любой класс массива содержит две основные функции — одну для запоминания информации в массиве и другую для извлечения информации. Именно зти функции в процессе работы могут проверять, не нарушены ли границы массива. Следующая программа реализует контроль границ символьного массива: !! Пример за цишенного массива ()1пс1иое <1оясгеаш> () ьпс1ис(е <сзТс11Ь> пауло пашеярасе ясФ с1аяя аггау ( 1пс яузе; сваг "р; рпЬ" 1с: аггау (тпеппш); - актау (] ( Йе1есе () р; ) сЬаг арпс (ьпс 1) сЬаг дес ('-'те 1) агтау::а сау (гп ппш) р =- пеи спаг (пшп); гг (! р! сопя « "Ошибка выделения памяти~и"; ехгс (1); !! Заполнение массива сЬаг ааггау=:рос(ьпс 1) Самоучитель С++ 11(1<0 ) ~ 1>-а1ае) соцт « "Ошибка, нарушены границы массива!!! ~п"; еа1г (1) ) гегигп р[1); // возврат ссылки на р[Ц // Получение чего-нибудь из массива с)таг аггау::атее(1пс 1) 1Г((<0 ( ) 1>=яте) сонг « "Ошибка, нарушены границы массива! ! ! ~п"; ех1г (1 )," гееагп р(1)> т/ символ возврата 1пг паап() зггау а (10) т а.рцс (3) = 'Х" а.

рцс (2) = 'Р.'; сонг « а.дес(3) « а. дев (2) я сонг « "М ) т* тегерь генерируем Динамнчаокув ошибку, связанную с нарушением границ массива */ а.рис(11) = '! гегцтт О; Это был пример практического применения ссылок в качестве возвращаемого значения функций„и вам следует тщательно его изучить. Отметьте, что функция ри(() возвращает ссылку на элемент массива, заданный параметром Е Если индекс, заданный параметром 1, не выходит за границы массива, то чтобы поместить значение в массив, эту ссылку можно использовать слева в инструкции присваивания. Обратной функцией является функция яе(О, которая возвращает заполненное по заданному индексу значение„если этот индекс находится внутри диапазона. При таком подходе к работе с массивом он иногда упоминается как безопасньш массив (ва~е аггау).

Имеется еще одна вещь, которую следует отметить в предыдущей программе, — это использование оператора печг для динамического выделения памяти. Этот оператор дает возможность объявлять массивы различной длины, Как уже упоминалось, способ контроля границ массива, реализованный в программе, является примером практического применения С++. Если вам Глава 4, Массивы, указатели и ссылки необходимо во время работы программы проверять границы массива, такой способ позволяет вам легко этого добиться. Тем не менее, запомните: контроль границ замедляет доступ к массиву. Поэтому контроль границ лучше включать в программу только в том случае, если имеется высокая степень вероятностинарушенияграницмассива.

1. Напишите программу, которая создаст безопасный двумерный (2хЗ) массив целых. Покажите, как она работает. 2. Правилен ли следующий фрагмент? Если нет, то почему? 1нт ЛГО; ~лт, х; х = П); 4.9. Независимые ссылки и ограничения на применение ссылок Хотя они обычно и не используются, вы можете создавать независимые ссьики (тйерепйепггегегепге). Независимая ссылка — это ссылка, которая во всех случаях является просто другим именем переменной.

Поскольку ссылкам нельзя присваивать новые значения, независимая ссылка должна быть инициализирована при ее объявлении. Поскольку независимые ссылки все-таки иногда используются, важно, чтобы вы имели о них представление. Однако большинство программистов чувствует их ненужность, они просто добавляют неразберихи в программу. Более того, независимые ссылки существуют в С++ только потому, что пока не было достаточного повода избавиться от них.

Как правило, их следует избегать. Имеется несколько ограничений, которые относятся к ссылкам всех типов. Нельзя ссылаться на другую ссылку. Нельзя получить адрес ссылки. Нельзя создавать массивы ссылок и ссылаться на битовое поле. Ссылка должна быть инициализирована до того, как стать членом класса, возвратить значение функции или стать параметром функции. Самоучитель С++ 740 Ссылки похожи на указатели, но зто не указатели.

1. Пример программы с независимой ссылкой: ьпв таьп1) гпп х; ьпс ьгет = х; // создание независимой ссылки гев = 100; здесь дважды пе атается число 100 сепг « х « ' ' « гее «"~п"; гегцгп О; В этой программе независимая ссылка ген служит другим именем перемен- ной х. С практической точки зрения геГи х идентичны.

2. Независимая ссылка может ссылаться на константу. Например, следующая инструкция вполне допустима: сопев тпв агег = 10; В ссылках такого типа выгода невелика, но иногда их можно встретить в программах. 1. Попытайтесь найти полезное применение для независимой ссылки.

Фьпс1пое <ьовггеал> пвьпд пашезрасе зьб; х = 10р гев = 10р зти две инструкции функционально идентичны Глава 4. Массивы, указатели и ссылки Теперь вам необходимо выполнить следующие упражнения и ответить на вопросы: 1. Ниже представлен класс а 1уре. Создайте двумерный, два на пять, массив и дайте каждому элементу массива начальное значение по своему выбору.

Затем выведите содержимое массива на экран. с1авв а еуре ковше а, Ь; р~лЫЪс: а Еуре ИочЫе х, с1оаЫе у) а =х; Ь= у; ) уо)с) васи() ( соос « а « ' ' «Ь « "~с" р 2. Модифицируйте решение предыдущей задачи так, чтобы доступ к масси- ву осуществлялся через указатель. 3. Что такое указатель Ф1я? 4. Покажите основные формы операторов пеи и де1еФе.

Какие преимущества они дают в сравнении с функциями пиПосО и ХгееО? 5. Что такое ссылка? Какое можно получить преимущество от использования ссылки в качестве параметра? 6. Создайте функцию гес1рО, которая получает один параметр-ссылку на значение типа доиЫе. Эта функция должна изменить значение своего параметра на обратное. Напишите программу вывода на экран результатов работы функции. В этом разделе проверяется, хорошо ли вы усвоили материал этой и предыдущих глав. 1. Пусть дан указатель на объект. Какой оператор использовать для доступа к члену объекта? 2. В главе 2 была создана программа с классом я1г$уре, в которой память для строки выделялась динамически.

Переделайте программу (показанную здесь для удобства) так, чтобы в ней использовались операторы веи и йе!е1е. )42 Самоучитель ()1пс1ибе <1овс геев> ()1пс1обе <сяШпо> ()1пс1пс)е <ся~о11Ь> пяупд пашеярасе агой с1аяя ябгбуре сваг *р; 1пс 1еп; риЫ1о: вгггуре (спаг+рТг); -вг ггуре ( ) ) чей впои(); вгггуре:: вгггуре (сваг *ргг) 1еп = ясг1еп(рсг) р (очаг ") ла11ос (1еп+1) ) Н(!р) ( сопб « "Свибка вь(деления памлти~п" ~ ех1Г (1) ь ) ябгсру(р, рГг) ) вгггуре:: -вггтуре ( ) соил « "Освобоь(ление памяти по адресу р~п"; аггее(р)) чоЫ вгггуре:: айова() сопб « р « " — длина: " с< "ег.; соус « "~п"; 1п~ паап ( ) ясгсуре в1("Этопроверха") , в2("ыне нравится С++'*)ь в1.вЬои() ь в2, вЬои(); геспгп О; 3.

Переделайте любую программу из предьщушей главы так, чтобы в ней использовались ссылки. Глава 5 Перегрузка функций В этой главе вы более подробно изучите перегрузку функций. Хотя с этой темой вы уже встречались, имеется несколько дополнительных аспектов, с которыми необходимо познакомиться. Здесь вы найдете ответы на следующие вопросы: как перегрузить конструктор, как создать конструктор копий, как функции передать аргументы по умолчанию, как можно избежать неоднозначности при перегрузке функций. Перед тем как продолжить, необходимо правильно ответить на следующие вопросы и сделать упражнения. 1. Что такое ссылка? Приведите две важных области применения ссылок? 2. Покажите, как с помощью оператора пеж выделить память для значений типа Поа1 и 1в1.

Покажите также, как освободить память с помощью оператора ЙеЫе. 3. Какова основная форма оператора пеъ, используемая для инициализации динамических переменных? Приведите конкретный пример. 4. Дан следующий класс. Как инициализировать массив из десяти элементов так, чтобы переменная х получила значения от 1 до 10 включительно.

с1ааа загпр ( ЫС х; раь1тс: амар(ьпе 1) ( х = ьч ) шг Вегх () ~ гегигп х; ) 5. Перечислите достоинства и недостатки параметров-ссылок. 6. Может ли быть инициализирован массив, память для которого выделяет- сядинамически? Самоучитель Сн 7. На основе следующего прототипа создайте функцию гпаяО, повышающую порядок значения переменной пап до того уровня, который задан переменной огйег: гогс) на9(1опц йпшп, 1опд огбег); Например, если переменная пшв равна 4, а переменная огйег равна 2, то после выполнения функции гваяо переменная в)ш должна стать равной 400. Напишите демонстрационную программу, показывающую, что функция работает.

5.1. Перегрузка конструкторов В программах на С++ перегрузка конструктора класса вполне обычна. (Деструктор, однако, перегружать нельзя.) Имеется три основных причины перегрузки конструктора, которая, как правило, выполняется либо для обеспечения гибкости, либо для поддержки массивов, либо для создания конструкторов копий. В этом разделе рассказывается об обеспечении гибкости и поддержке массивов, а о конструкторах копий — в следующем. Перед изучением примеров необходимо запомнить одну вещь: каждому способу объявления объекта класса должна соответствовать своя версия конструктора класса. Если эта задача не решена, то при компиляции программы обнаружится ошибка.

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

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

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

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