Г. Шилтд - Самоучитель C++ (DJVU) (1114955), страница 72
Текст из файла (страница 72)
И последнее. Запомните: С++ дает вам беспрецедентные возможности и важно научиться мудро ими пользоваться. Благодаря этим возможностям С++ позволит вам значительно расширить потенциальные области применения ваших приложений. Однако злоупотребление ими может привести к появлению программ, которые трудно понимать, которым почти невозможно следовать и которые слишком тяжело сопровождать.
Язык программирования С++ — это мощнейший инструмент, но, как и любой другой инструмент, он хорош только тогда, когда находится в надежных руках. Приложение А Некоторые отличия языков программирования Си С++ Для подавляющего большинства задач программирования С++ можно считать надмножеством языка С (как он описан в стандарте АХЯ1 по С), поэтому фактически все программы С являются также программами С++. Имеется несколько отличий, о части из которых было рассказано в главе 1.
Ниже перечислены оставшиеся отличия, о которых вам следует знать: Незначительное, но потенциально важное отличие между С и С++ состоит в том, что в С символьная константа автоматически преобразуется в целое, а в С++ нет. гз В С можно объявить глобальную переменную несколько раз, что, хотя и считается плохим стилем программирования, но ошибкой не является.
В С++ многократное объявление глобальной переменной считается ошибкой. В С по крайней мере первые 31 символ идентификатора являются значащими. В С++ значащими являются все символы идентификатора. Тем не менее с точки зрения практики столь длинные идентификаторы вряд ли могут где-нибудь пригодиться. а В С вы можете вызвать функцию аа1п() в любом месте программы, хотя какую-либо пользу от такого вызова представить себе довольно трудно. В С++ вызов функции пта1по из программы не допускается.
а В С нельзя получить адрес регистровой переменной (переменной типа гея1згег), а в С++ — можно. 9 В С тип жсЬаг 1 определяется с помощью объявления гурейеГ. В С++ мсйаг 1 является ключевым словом. Приложение В Ответы на вопросы и решения упражнений В этом приложении вы найдете ответы на вопросы и решения упражнений для подавляющего большинства (но не всех) приведенных в книге заданий. Часть вопросов и упражнений оставлены вам для самостоятельного творчества.
Советуем вам тщательно и добросовестно выполнять все задания, независимо от того, есть в этом приложении ответы на них или нет. ГЛАВА 1 Упражнения 1. бб1пс1пбе <ьоввтежо пвтпд папеврасе," Зпб жатв() оопЫе Ьоптв, наде; сопб « "Введите количество проработанньж часов: стп » Вонга ~ сопб « "Введите почасовув оплату: стп » наде; сопб « "Зарплата равна: а" << маде * Ьоитв; тебпвп Ор 2. Вгпс1пйе <1овввеа~п> пвгпд пакеврасе вЫ; Самоучитель Сн- 47б Епв щауп () 1 боиЬ1е Ееег; бо ( совс « "Введите число Футов (О для завершения): "> сгп» Ееев; совс « Ееес * 12 « " дюймовки"р ) иЬ11е (Ееес != 0.0); геСигп 0; 3. /+ В этой програвпсе рассчитывается наименьлее общее кратное ~1 ()тпс1пбе <Еовсгеасп> пябпд папеярасе явб; Епг ша1п ( ) ( Епв а, Ь, б, гпуп; сопп « "Введите два числа.
сз гт» а»)эс штп а > Ь ? Ь: а' Ео (с(=2; б<ш1п; б+~-) 1~(((а%б)==0) ай ((ЬЪб)==О)) Ьгеак; ЕЕ (б==тп1п) ( сочв « "Иет общего кратного~в": ге пгп О; сонг « "Наименьшее общее кратное равно " « б « "~п"; гесвгп О; 1.4 1. Этот комментарий, хотя и выглядит довольно странно, вполне допустим. 1.5 2. ()1пс1пбе <1овсгеаш> ()1пс1ибе <сявгупд> иябпд пашеярасе ягб; 477 Приложение В.
Ответы на вопросы и решения упражнений с1азз сагс1 ( спал 1С1е[80)т // заглавие книги сЬаг анг)тог[401; // автор 1пс пттптЬегт // количество имеющихся экземпляров рпЬ11с: чоЫ зсоге(сЬаг "Ь, сЬаг *павте, 1пг пттттт)т гоуер зЬои(); гол сагс)т:зсоге(сЬаг *С, сЬаг *пакте, 1пг пвтл) зГгсру (~1С1е, Ь); зггсру(ацсЬог, пакте)) пплтЬег = пвлтт ттоЫ сатс(; тз)тон() ( сопл « "Загдавитп " «с(с1е « "М" т сопЬ « "Автор: " « ап(.Ьог « нуп"; соттг « "Количество экзетлтляровт " « пттпЬег « "~п"; 1п, пта1гт ( ) ! саго ЬооК1, ЬооК2, ЬооКЗ; ЬооК1.зГоге("папе", ''КгапК НегЬегг", 2)т ЬооК2.зЬоге("ТЬе Коппс)агуоп Тг(1ооу", "1ваас Аз1тотт'*, 2); Ьоо)сЗ.в~оке("ТЬе ВаупЬэит", "В. Н.
).аигетзсе", 1); Ьоо)с1. зЬои (); ЬооК2.зЬои()т ЬооКЗ.зЬои(); гесптп От 3. 1)1пс1цс)е <1озггеата> пз(пц палтезрасе зсс); ()с[е~упе я12Е 1ОО с1авв с1 ~ура 1пг с[пепе[Б12Е)т !т' содержит очередь (пс Ьеаа, Са11т !/ индекс верщинвт и хвоста роЬ11ст чо)с[ 1п1Ь(); // инициализация чоЫ с)((пс пата) т // запоминание Приложение 8.
Ответына вопросы и решения упражнений 479 гс1ш и 0; 1.6 1. У функции Я нет прототу)па. 1.7 1. ()1пс1ибе (1озггеащ> ()1пс1нбе <сщагЬ> цятвд пащеярасе яЬ<(' Перегрузка ))ункгд<и згооЬ() для зпседегя, 1опдя и оонЫея 1пс агоева (1пЬ 1) ) 1опд згоо1 (1опд 1) с(оиЬ1е ягоог (с(оцЬ1е 1); 90В р ен: " « я г(901) сонг « сонг (< сонг (< гегнгп 0; 90 равен: " « згоог~90) Возвращает квадратньй корень целого (пь згоос(1пС 1) ( сонг (< "расчет корня недолог"; гесигп (1пг) здг' ( (с(оиЫе) 1); ,// Возвращает квадратный корень длинного целого 1опд згооГ(1опд 1) сонг « "расчет корня длинного целого~в"; гесцгп (1опд) зс(г1((боцЫе) 1); 7/ Возвращает квадратный корень вещественного с)онЬ1е згооГ(с(оиЫе 1) сонь (< "расчет корня вещественного~п"; гегцгп ядгЬ(1); 1пг ща1п() ( соус « сои~ << "Квадратньлл корень "~п"р 'Квадратнввг корень "~п"р 'Квадратный корень 90.34 равен: " « ягоос (90.34); 480 Самоучитель С++ 2.
Функции а1010, а1010 и а1о10 нельзя перегружать потому, что они отличаются только типом возвращаемого значения. Перегрузка функции требует, чтобы было отличие либо в типе, либо в числе аргументов. 3. // перегрузка функции тв1п П $1пс1пйе <1ояегеаш> ((1пс1нс)е <ссеуре> нягпд папеярасе ягс); сЬаг тв1п(сваг а, сЬаг Ь) гпг т1п (1пс а, 1пг Ы ( г)онЫе ткьп (с)опЬ1еа, сон)Ые Ь) гпг и1п() ( сонг « "минимум равен: " « в1п ( ' и ', *а') « "~п~~) сонг « "минимум равен: " « в~1п(10, 20) << "1п" т соня « "Минимум равен: " «' лпп(0.2234, 99.2) « "~п"; гевигп 0; Минимум для сЬагя сЬаг Ып (сЬаг а, сЬаг Ы ( гевнгп Го1оиег(а) < Со1оиег(Ь) ? а: Ь; Миниьд~м для 1пЬя 1пг пйп (1пь а, гпг Ь) ( гегнгв а < Ь ? а: Ь; Минимум для ЙонЬ1ея аонЫе ппп (боиЬ1е а, аонЬ1е Ь) ( гегнгп а < Ь ? а: Ь; ) 4. ()1пс1ис1е <1оятгеал> ця(па пагпеярасе ягс); // Перегрузка функции я1еер() для вызова с целым либо со строкой уоиа я1еер(1пс и); уоЫ я1еер(сЬаг *и); // Измените эту величину // в соответствии с быстродействием вашего процессора ()с)ег1пе РЕ(АУ 100000 48( П уложение В.
Ответы на воп осы и ешенив и ажнений )пС тпа)п Ц сонг « в1еер (3); соне « ' в1еер(п2Я) соцс«' гетцтп О; Функция в1еер () с пеньки аргументом тоЫ а1еер («пг п) ( 1опд «ог(; пз и-- ) «ог («=О; 1<0ЕХАУз «.н-); Функция в1еер () с аргументом тига с)заг * зоз.с( в1еер (с)заг *п) ( 1опд «пе зз =- аго«(п); «ог(з Э ) .з ) «ог (1=0; 1<ОЕтМз «+~-) Проверка усвоения материала главы 1 1. Полиморфизм — это механизм, посредством которого можно использовать один общий интерфейс для доступа к разным реализациям задачи.
Инкапсуляция обеспечивает защищенную связь инструкций и данных, с которыми работает программа. Доступ к таким скрытым частям программы может быть затруднен и этим предотвращается несанкционированный доступ к ним. Наследование — это процесс, посредством которого один объект может приобрести свойства другого. Наследование используется для поддержки иерархии классов. 2. Комментарии могут включаться в программу С++ либо как обычные комментарии в стиле С, либо как однострочные комментарии, характерные для С++. 3. Фз.пс1цс(е <«овегеаззз> цв«пд пазззеврасе взс); 4Вг Самоучитель шп ка1п ( ) ш' Ь, е, соиГ « "Введите основание степени: с1а »Ь; сопя « "Введите показатель степени: с1п»е; г = 1; Гог(; е; е — ) г=г*Ь; сопя « "Итог: " « г; геспгп О; шс ла1п () сваг я](80), я2(801; аггсру(я1, Это проверка"); геч впг (а1, вг); сон" « я2 « "~п"; геч 5Гг (51); сон « я1 « "~п"; геспгп О; Реверс строки и передана результата по адресу я чоЫ геч вГг(сваг *я) ( спаг .гешр (80]; 1пп1, 1 ~ аког (1=яГг1еп(в) -1, л=0; 1>=0; Гетр[1 ] в(1 Гоар( О' ] = '~0'; // нуль Заввршает строку япгсру(я, ~етр); 4.
()1пс1пс(е <1овГгеатп> Мшс1пйе <сяггшд> пяупо папеярасе яМ; Перегрузка функции чоЫ геч агг(сваг *я)р чоМ геч ягг(сваг *ш реверса строки // реверс строки по адресу я сваг +опГ) 4 // реверс строки и пересылка ее // по адресу опп Приложение В. Ртветы на вопросы и решения упражнений Реверс строки и передача чоЫ теч зек(спек *1п, спал ьп результата по адресу опв *оис) Еок(1=зШеп('п)-1, 1=01 ада[ з ) = 1п[ 1>0; 1 —, зи) оШ [ 1 ) = ' ~0 ' ' ! ! нуль завершает строку б. ([1пс1ис[е <1озежеаш.Ь> 1пе 1'(1п1 а)," 1п~ ша1п() сон~ << й (10); -есптп О; 1п"' Й(ьпк а) етивп а * 3.141б; ГЛАВА 2 Повторение пройденного 1.
()1пс1пс(е <1оз~геаш> ([1пс1пс1е <сястйпд> пяьпи патпеярасе ясс[; тпрр шавп () спал з [ЭО); сопя « "Введите строку: сап » з; « яст1еп(я) « "1п"' совс « "длина строки равна: тесн сп О; 6. Тип данных Ьоо[ предназначен для хранения значений булева типа. Значениями булева типа являются только два значения — это (тпе и (а[ве. Самоучитель С++ 2. 41пс1ибе <1озггеаа> Ф1пс1пбе ссяпгупу> из1пц пашеярасе яЫ; с1аяя аббг [ сваг паше[40]; сваг всгеес [40]; сваг схгу [30]; сваг ясаке[3]; сваг з1р[10]; ряб] 1 с тоЫ зсаге(сваг *и, сваг *я, сваг *с, сваг *П, сваг *г); ~тоуб бувр1ау (); чо1б аббг:: згоге (сваг *п, сваг *я, сваг "с, сваг *С, сваг *к) ' зггсру(паше, и); вггсру(всгеес, з); всгсру(с1су, с); я~гору(ятасе, ~); вггсру(з1р, з) тоЫ аббг:: б1вр1ау() 1п~ ша1п ( ) абаг а; а.з1оге("И.