Г. Шилтд - Самоучитель C++ (DJVU) (1114955), страница 87
Текст из файла (страница 87)
В отличие от обычных переменных-членов, для которых характерно то, что в каждом объекте класса имеется их копия, у статической переменной-члена существует только одна копия, которую все объекты класса используют совместно. 2. Для использования массивов в качестве объектов ввода/вывода в программу необходимо включить заголовок <в1гв1геаш>. 3.
Нет. 4. ехгегп "С" 1пг соппгсгО; 5. Функция преобразования просто превращает объект в значение, совместимое с другим типом данных. Как правило, этим другим типом данных является встроенный тип данных С++. 6. Ключевое слово ехр11с11 применяется только к конструкторам. Оно предотвращает неявное преобразование конструкторов. 7. Постоянная функция-член нс может модифицировать объект, который ес вызывает. 8. Пространство имен, объявляемое с помощью ключевого слова пагпезрасе, предназначено для локализации области видимости имен. 9. Ключевое слово взц~аЫе дает возможность постоянной функции — члену класса изменять данные, являющиеся членами этого класса. Проверка усвоения материала в целом 1. Да. В ситуациях, в которых неявное преобразование выполняет то же действие, которое в отношении типа параметра конструктора было бы выполнено перегруженным оператором присваивания, перегружать оператор присваивания не нужно.
2. Да. 3. Новые библиотеки можно размещать в собственных пространствах имен, предотвращая тем самым конфликты имен с кодами других программ. Эта полезная возможность оказывается столь же полезной и в отношении старых кодов, которые предполагается использовать с новыми библиотеками. ГЛАВА 14 Повторение пройденного 1. Пространства имен были добавлены в С++ для локализации имен идентификаторов с целью предотвращения конфликтов имен. Проблема конфлик- Приложение В. Ответы на вопросы и решения упражнений 651 тов имен серьезно заявила о себе в последнее время благодаря постоянному росту числа и объема библиотек классов сторонних фирм.
2. Чтобы функцию-член сделать постоянной, необходимо за списком параметров функции указать ключевое слово сопз1. Например: (п1 Г(1пв а) соп31; 3. Нет. Модификатор пш1аЫе (модифицируемый) позволяет постоянной функции-члену изменить переменную-член, 4. с1авв Х 1 1п1 а, Ь; раЬ11с: х(тпг1,)п11)(а=1,ь=зр орега1ог 1пе () 1 ге1пгп а+ь1 5. Да, это так. 6.
Нет. Спецификатор ехр11сй запрещает автоматическое преобразование типа 1п1 в тип 1)ешо. Упражнения 14.1 1. Контейнер — это объект, предназначенный для хранения других объектов. Алгоритм — это процедура, предназначенная для работы с содержимым контейнеров. Итератор по отношению к объектам библиотеки стандартных шаблонов действует аналогично указателю. 2. Предикаты бывают бинарными и унарными. 3. Существуют следующие пять типов итераторов: произвольного доступа, двунаправленный, однонаправленный, ввода и вывода. 14.3 2. Для любого объекта, хранящегося в векторе, должен быть определен конструктор по умолчанию.
3. У! Хранение в векторе объектов класса Соотг) ()1пс1и6е <вове геев> ()з.пс1пг)е <уес1ог> ив1пс пагпеврасе вгг); Приложение В- Ответы на вопросы и решения упражнений 1)в(<с11аг> 1зг; // создание пустого списка (пг х~ йог(1=0; "'<10; 1++) 1зг.рпзЬ Ьас)г( 'Л' + 1); соп « "Размер = " « 1зс. ваге () « епб1; 11зС<сЬаг>:: Егегасогрг сопл « "Содержимое: гог(1=0; ' <1зс.злее() т 1++) ( р = 1зс. Ьедтп (); сопс « *р; 1зс .рор мгспс(); 1зс,рпзЬ ЬасК(~р) т // раэмецение элемента в конце списка сопл « пб1; 1? (! 1зг.ергу () ) сопв « Список пусткм не является ~в"; геспгп 0~ После выполнения программы на экране появится следующее: Размер - 10 Содержимое: йВСОЕР6Н1,7 Список пусткм не является В данной программе элементы поочередно извлекаются из начала списка и размещаются в его конце.
Таким образом список никогда не остается пустым. В цикле по выводу на экран содержимого списка с помощью функции аие() организуется непрерывный контроль его длины. 3. // Слияние двух списков проектов 91пс1ибе <1озсгеав~> ((?пс1пбе <11зГ> $1пс1ибе <сзтг)пЕ> игбпЕ пагпеврасе згб; с1азз Рго1ест ( риЬ11с: сЬаг пюве (401; )п? бауз ео соп~р1еГЕоп; РтоОесс() зсгсру(паве, " ") бауз со совр1ес?оп = 0; Самоучитель С+ 1 Рлолес1 (спал *и, 1пл с)) я~лору (пате, и); с(ауз ло сотр1еб1оп = с); .оЫ асЫ с)ауз(1пс 1) с(ауз Ьо сотр1е~1оп += 1; чо1о зоЬ с(ауз ( 1пл 1) с)ауз Ьо сотр1ет1оп -= 1.; Ьоо1 сотр1ебей() ( лесилп !с(ауя Со сотр1еб1оп; чоус) лерогс () соцс « пате « сонь « с(ауз ло сотр1ес1опу сонь « " дней до завершения~в"; Ьоо1 орелабол< (сопзб Рлочесс за, сопзл Рлочесь зЬ) лесцлп а.с)ауз со сотр1е11оп < Ь. с)ауз со сотр1еТ1оп: ) ьоо1 орелабол> (сопзь Рло~есб за, сопзб Рлочесл аь) лебцлп а.с(ауз Ьо сотр1ебаоп > Ь,с(ауз ~о сотр1е+хоп," ) Ьоо1 орелабох (сопяь Рсо.)есс 4а, солзс Рлозесс зЬ) ( лелилп а.с(ауз бо сотр1е~1оп == Ь.с)ауз о сотр1елуоп; Ьоо1 орелапол != (сопел РлоЭесб аа, сопзь Рлочесс зо) ( гебнсп а.с)ауз Ло сотр1ес1оп != Ь.
с(ауз Со сотр1е11оп," ) 1пс таун() ( 11я~<Рло1ес1> ргол; 11зс<Рло3есс> ргоЛ2; рло1 .рнзЬ Ьас)с(Рло5есл("Разработкакомпилятора", 35) ); рлол' .ризЬ Ьас)с(Рло1ес~("Разработка электронной таблицы", 190)) Рло1 ризЬ Ьас)с(Рло1есС (" Разработка Ять", 1000) ); Приложение В. Ответы на вопросы и решения упражнений рго12. рпзЬ ЬасЕ(РгоаесС (" Разработка базы даьл~ьпс", 280) ); рго12.рпзЬ ЬасК(Рго1ес~("Разработка стандартных писем", 50) ]; рго12.рпзЬ Ьаск(Рго1есГ("Разработка объектов СОМ", 300) ); рго3.зогг()) рго~2,зог~(); рго3.жегде(рго12); уу слияние списков 11з~<Рго~есг>::11ега~ог р = рго~.Ьед1п(); вывод проектов на экран иЬ11е(р .= рго1.епб() ) ( р->герог~(): р++; геспгп О," 2.
// Ассоциативный список абонентов и телефонных номеров ()1пс1пс)е <1озггеаж> ()1пс1пс)е <жар> ()фпс1пбе <сясгфпд> пяфпд патеярасе зМ) с1аяя паже сЬаг з1г(20); риЬ11с: паже() ( зггсру(згг, ""); ) паже (сЬаг *я) ( япгсру(ягг, з): ) сЬаг *деб() ~ геппгп зЬг) )(ля объектов типа паше следует определить оператор < (меньше) Ьоо1 орега~ог< (паже а, паше Ь) геппгп зогсжр(а.
дев (), Ь.деС()) < 0; ) с1аяя рЬопеппж ( сЬаг згг [20], рпЬ11с: рЬопеппж() ( з~гсжр(зг.г, "")р рЬопеппж(сЬаг *з) ( зегсру(з~г, з); ) сЬаг "дев() ( геспгп япг; ) Самоучитель С++ 1пг тафп() тар<пате, р)зопепшп> т; Размещение в ассоциативном списке имен абонентов и их телефонных номеров т, 1паег~(ра1г<пате, р)зопепит> (пате ("Василийь), р(зопепыт("541-85-51") ) ) ) т.фпяегг(ра1г<пате, р)зопепопг> (пате("Иосиф" ), р)зопетплп("558-09-96")]); т.фпаегг(ра1г<пате, р)зопепнт> (пате(вМихаил"), р)зопепшп("8-3712-41-16-36")))з га.1пяегг (ра1г<пате, рпопепцзп> (пате("Никодим" ), р)зопегшп("8-095-967-85-85") ) ); поиск телефонного номера по заданному имени абонента с)заг ягг(8О)' соцс « "Введите имн; сз гз » я~г; тар<пате, р)зопепшп>::1гегагог р; р = т.
21пб (пате (я г) з 6 (р з = т. епб () ) сонг « "телефонньм номер: " « р->яесопб.де (); е1яе сонг « "такого имени в ассоциативном списке натан"; гесигп О; 14. б 1. // Сортировка вектора с помощью алгоритма яогг ()1пс1ыбе <Тоя~геапз> ()1пс1цбе <чессог> ()зпс1нбе <сягб11Ь> () 1пс1пбе <а1дог1ст> ыя1пд патеярасе ягб; Тпг таз.п () геолог<с)заг> ч; 1п 1; Создание вектора из случайных символов П иложение В. Ответы нв вопросы и решения првжнвний Гол(1-0; 1<10; 1++) ъ .рияЬ Ьас)с('А' + (тапб() 426)) ) сопС « "Исходное содержимое: тот (1=0? 1<у.
в1ве ()," 1++) сопл « ч[т] « сон~ << епс?1 « епй1; // Сортировка вектора вот С ( ж . Ьед 1п ( ), ч . епс) ( ) ) сенс « "Отсортированное содержимое: Кот(3. 0; 1<ч.51ее()? 1~+) сопс « у[1] « те?птп 0; 2. // Выполнение слияния двух списков с помощью алгоритма л?епде ()1пс1пбе <товт.геа?в> ()1пс1ибе <1?вс> ()1пс1пбе <а1пот1?л> пь?пд папеврасе яьс?? ?пс паз и ( ) 1?вс -сааг> 1яв1, 1яС2, 1я13 (20); ?пс1 ? 1от(1=0? 1<10у 1+=2) 1яС1.рияЬ Ьас!<( 'А' + 1); Гоп(1=0„ т<11; 1 +=2) 1я?2 .рпвЬ Ьас)с( 'А' + 1), сенс « "Содержимое списка 1яя1: 11вс<сЬаг>:: ?сева?от р = 1вТ1.Ьед1п() ' иЬ11е (р ! = 1яя1. евс? () ) ( сопс « *р' Р~-'-; ] сопс «еп61 « ела; сопс « содержимое списка 1вв2: р = 1вт2,Ьец1п (); м?111е(р ~= 1я~2.епс?() ) ( сонь с< *р; р++„ сопл « епс(1 « епо1; с++ Самоучитель // Теперь выполняем слияние двух списков ?петре (1вг1.Ьед1п (), 1зс1. епб (), 1зс2 .Ьед?п (), 1зс2 .
епо (), 1зСЗ.Ьедз.п()); соцг « "Содержимое списка после слияния: р = 1всЗ.Ьед?п(); иЬ11е(р != 1зсЗ.епс() ) соцс « р.~-+ те?итп О; 1. ((гпс1ис(е <1озггеащ> ()1пс1ибе <зФппц> Ш по!цс1е <1(з? > цв(па патпеврасе вгс); (и( ша1п () 11в?.сзсг?пд> зсг; вгг.рцзп Ьаск(зсгзпд ("один") ); згг. рцзп Ьас)с(зсг?тд ("два") ); ,всг.рцзЬ Ьас1(згг1пд("три")); ,зсг.ризЬ Ьас)с(зсг?пд("четыре")); ,зсг.рцвЬ Ьас~(зсг1пд("пять"]); ,зсг.ризЬ Ьас)с(зсг1пд("шесть"))," .згг.ривп Ьас)с(зсг1пд("семь" )); .вгг.рцзЬ Ьас)с(зсгапд("восемь")); .в~г.ривЬ Ьас)с(вгг1пд("девять" )); .зсг.ривЬ Ьас)с(зсгапд("'десять*')); ,всг.вогг(); уу сортировка списка 11вссзсг1пд>:: 1сегагог р = вгг.
Ьед1п (); нЬ(1е (р . = вгг. епс) () ) ( сонг сс *р сс р-.'-+ ) гесцгп О; б59 Приложение В. Ответы на вопросы и решения упражнений 2. $1пс1цт(е <1ов1геатп> $1пс1ит(е <ятг( пя> $1пс1ит(е <а1дог1с)тта> цв1пд патпеярасе яМ; 1пс таа1п() яггт пя ятг; сопя « Введите строку: сз гт» явг; 1л(; 1 = соттпс (явг.)зед1п (), ясг.епт((), 'е'); сонг « - <» " символов являются символом еМ 1 теяпггт О; .3. ()1пс1пт(е <1ояегеав> ((1пс1пс)е <ясг1лд> () 1пс1ит(е <а19ог1с)тттт> ()1пс1от(е»сстуре> пя1пд пагаеярасе яга; 'пг. тпа1п() яг.ггпу яяг; сош « "Введите строку: с(п » ятг; (пг 1 = соцпг 11 (агат.Ье91п(), вт.г.опт)[), (я!омтег); сош « т « " символов введено в нижнем регистрет,п" т гсШгп 0; 4.
Класс а1пття — это конкретизация класса-шаблона Ъаас в1гт~щ. Проверка усвоения материала главы 14 1. Библиотека стандартных шаблонов предоставляет многократно опробованные, отлаженные версии многих традиционных структур данных и алгоритмов. Поскольку контейнеры, входящие в библиотеку стандартных шаблонов, являются классами-шаблонами, их можно использовать для хранения данных любых типов. Самоучитель С++ 2. Контейнер — это объект, предназначенный для хранения других объектов. Алгоритм — это процедура, предназначенная для работы с содержимым контейнеров. Итератор по отношению к объектам библиотеки стандартных шаблонов действует аналогично указателю.