246071-Либерти-Освой-самостоятельно-С-за-21-день (Освой С++ самостоятельно за 1 день. Книга), страница 9
Описание файла
PDF-файл из архива "Освой С++ самостоятельно за 1 день. Книга", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 9 страницы из PDF
Последняя формазаписиназывается"верблюжьимпредставлением",посколькуоднапрописнаябуквапосерединеслованапоминаетгорбверблюда.Одни считают, что имена переменных с символом подчеркивания внутри слова (my_car)читаютсялегче.Другимненравитсяэтотподход,потомучтоонякобывызываеттрудностипривводе.Вэтойкнигеотдельныесловавсоставныхименахпеременныхначинаютсяспрописнойбуквы:myCar,theduickBrownFoxит.д.Ноэто,конечно,никчемуваснеобязывает,ивыможетеиспользоватьдругиеподходыпривыбореимен.Примечание:Многие профессиональные программисты применяют так называемыйвенгерский стиль записи переменных. Идея состоит в том, что каждая переменная должнаиметь префикс, указывающий на ее тип. Так, имена целочисленных переменных (типа int)должныначинатьсясострочнойбуквыi,длинныецелые(типаlongint)—сострочнойбуквыl.Соответствующимипрефиксамидолжныбытьпомеченыконстанты,глобальныепеременные,указателиидругиеобъекты.ОднакоэтоимеетболееважноезначениевпрограммированиинаязыкеС,чемнаC++,посколькупоследнийподдерживаетсозданиенестандартныхтипов,илитипов,определенныхпользователем(подробнееобэтомсм.занятие6),атакжепотому,чтовязыкеC++установленболеестрогийконтрользатипамиданных.КлючевыесловаНекоторые слова изначально зарезервированы в языке C++ и поэтому их нельзяиспользоватьвкачествеименпеременных.Такиеслованазываютсяключевымиииспользуютсякомпиляторомдляуправленияпрограммой.Вихчисловходятif,while,forиmain.Втехническойдокументации компилятора должен быть полный список всех зарезервированных слов.ТипичныйнаборключевыхсловязыкаC++приведенвприложенииБ.Не рекомендуется:Не используйте ключевые слова в качестве имен переменных.
Неприсваивайтебеззнаковымпеременнымотрицательныечисла.Рекомендуется:Указывайте тип переменной перед именем при ее определении.Используйтедляпеременныхинформативныеимена.Помните,чтовязыкеC++различаютсяпрописные и строчные буквы. Уточните, сколько байтов занимает в памяти каждый типпеременнойнавашемкомпьютереикакиезначениямогутхранитьсявпеременныхэтоготипа.СозданиенесколькихпеременныходноготипаВ языке C++ предусмотрена возможность создания в строке программы сразу несколькихпеременных одного типа. Для этого следует указать тип, за которым перечисляются именапеременных,разделенныезапятыми.Например:unsignedintmyAge,myWeight;//двепеременныетипаunsignedintlongintarea,width,length;//трипеременныетипаlongintВ данном примере обе переменные, myAge и myWeight, объявлены как беззнаковыецелочисленные.Вовторойстрокеобъявляютсятрипеременныесименамиarea,widthиlength.Всем этим переменным присваивается один и тот же тип (long), поэтому в одной строкеопределенияпеременныхнельзясмешиватьразныетипы.ПрисваиваниезначенийпеременнымС этой целью используется оператор присваивания (=).
Так, чтобы присвоить число 5переменнойWidth,запишитеследующее:unsignedshortWidth;Width=5;Примечание:Типlong—зтосокращенноеназваниетипаlongint,аshort—сокращенноеназваниетипаshortint.Эти две строки можно объединить в одну и инициализировать переменную Width впроцессеопределения:unsignedshortWidth=5;Инициализациянапоминаетприсваивание,особенновслучаеинициализациицелочисленных переменных. Ниже, при рассмотрении констант, вы узнаете, что некоторыезначенияобязательнодолжныбытьинициализированы,посколькупоотношениюкнимнельзявыполнять операцию присваивания. Существенное отличие инициализации от присваиваниясостоитвтом,чтоонапроисходитвмоментсозданияпеременной.Подобно тому, как можно определять сразу несколько переменных, можно иинициализироватьсразунесколькопеременныхприихсоздании.Например://создаемдвепеременныхтипаlongиинициализируемихlongwidth=5,length=7;В этом примере переменная width типа long int была инициализирована значением 5, апеременная length того же типа — значением 7.
При определении нескольких переменных воднойстроке,инициализироватьможнотольконекоторыеизних:intmyAge=39,yourAge,hisAge=40;Вэтомпримересоздаютсятрипеременныхтипаint,аинициализируютсятолькоперваяитретья.Влистинге3.2показанапрограмма,полностьюготоваяккомпиляции.Внейвычисляетсяплощадьпрямоугольника,послечегорезультатвыводитсянаэкран.Листинг3.2.Демонстрацияиспользованияпеременных1://Демонстрацияиспользованияпеременных2:#include<iostream.h>3:4:intmain()5:{6:unsignedshortintWidth=5,Length;7:Length=10;8:9://создаемпеременнуюAreaтипаunsignedshortиинициализируемее10://результатомумножениязначенийпеременныхWidthнаLength11:unsignedshortintArea=(Width*Length);12:13:cout<<"Width:"<<Width<<"\n";14:cout<<"Length:"<<Length<<endl;15:cout<<"Area:"<<Area<<endl;16:return0;17:}Результат:Width:5Length:10Area:50В строке 2 содержится директива препроцессора include, включающаябиблиотеку iostream,котораяобеспечиваетработоспособностьобъектавыводаcout.Собственно,программаначинаетсвоюработувстроке4.Встроке6переменнаяWidthопределяетсядляхранениязначениятипаunsignedshortint,итутжевыполняетсяинициализацияэтойпеременнойчислом5.Вэтойжестрокеопределяетсяеще одна переменная Length такого же типа, но без инициализации.
В строке 7 переменнойLengthприсваиваетсязначение10.В строке 11 определяется переменная Area типа unsigned short int, которая тут жеинициализируетсязначением,полученнымврезультатеумножениязначенийпеременныхWidthиLength.Встроках13—15значениявсехпеременныхпрограммывыводятсянаэкран.Обратитевниманиенато,чтодляразрывовстрокиспользуетсяспециальныйоператорendl.КлючевоесловоtypedefПорой утомительно и скучно многократно повторять запись таких ключевых слов, какunsigned short int.
(Кроме того, в этих трех словах немудрено наделать еще и кучу ошибок.) Вязыке C++ предусмотрена возможность создания псевдонима для этой фразы путемиспользованияключевогословаtypedef,котороеозначаетопределениетипа.При создании псевдонима важно отличать его от создания нового типа (об этом пойдетречь на занятии 6). Чтобы создать псевдоним типа данных, сначала записывается ключевоеслово typedef, за которым следует существующий тип, а за ним новое имя с символом точки сзапятой.Например,привыполнениистрокиtypedefunsignedshortintUSHORT;создается новое имя USHORT, которое можно использовать везде, где нужно определитьпеременную типа unsigned short int.
Листинг 3.3 переделан из листинга 3.2 с использованиемпсевдонимаUSHORTвместословunsignedshortint.Листинг3.3.Примеропределениятипаспомощьюtypedef1://*****************2://Примеропределениятипаспомощьюtypedef3:#include<iostream.h>4:5:typedefunsignedshortintUSHORT;//определениепсевдонима6:7:intmain()8:{9:USHORTWidth=5;10:USHORTLength;11:Length=10;12:USHORTArea=Width*Length;13:cout<<"Width:"<<Width<<"\n";14:cout<<"Length:"<<Length<<endl;15:cout<<"Area:"<<Area<<endl;16:return0;17:}Результат:Width:5Length:10Area:50В строке 5 идентификатор USHORT с помощью ключевого слова typedef определен какпсевдоним типа unsigned short int.
В остальном эта программа аналогична предыдущей,представленнойвлистинге3.2,даирезультатыработыобеихпрограммсовпадают.ВкакихслучаяхследуетиспользоватьтипыshortиlongНачинающимпрограммистамчастобываеттруднопринятьрешениеотом,когдаобъявлятьпеременную с использованием типа long, а когда — с использованием типа short. Правилодовольно простое: если существует хоть малейший шанс, что ваше значение будет слишкомбольшимдляпредполагаемоготипа,используйтетипсбольшимразмером.Приведенные в табл. 3.1 переменные типа unsigned short int, как правило, имеют размер,равный двум байтам, и могут хранить значение, не превышающее 65 535.
Знаковые короткиецелые делят свой диапазон между положительными и отрицательными числами, поэтому ихмаксимальноезначениевдвоеменьше,чемубеззнаковогокороткогоцелого.Хотяпеременныетипаunsignedlongintмогутхранитьоченьбольшоечисло(4294967295),оновсе-такиконечно.Есливамнужноработатьсещебольшимичислами,придетсяперейтикиспользованию типов float или double, но при этом вы несколько проиграете в точности.Переменныетипаfloatиdoubleмогутхранитьчрезвычайнобольшиечисла,нонабольшинствекомпьютеров значимыми остаются только первые 7 или 19 цифр, т.е. после указанногоколичествацифрчислоокругляется.Переменныесменьшимразмеромиспользуютменьшийобъемпамяти.Внашиднипамятьстановится все дешевле, а жизнь не так уж длинна, чтобы тратить ее на экономию памяти.Поэтомуотдайтепредпочтениетипуint,которыйнабольшинствекомпьютеровимеетразмервчетыребайта.ПереполнениебеззнаковыхцелыхЧто случится, если при использовании беззнаковых длинных целых превысить ихпредельныймаксимум?Когда беззнаковое целое достигает своего максимального значения, при очередноминкременте оно сбрасывается в нуль и отсчет начинается сначала, как в автомобильномодометре.
В листинге 3.4 показано, что произойдет при попытке поместить слишком большоечисловпеременнуютипаshort.Листинг3.4.Примерпереполнениябеззнаковойцелойпеременной.1:#include<iostream.h>2:intmain()3:{4:unsignedshortintsmallNumber;5:smallNumber=65535;6:cout<<"smallnumber:"<<smallNumber<<endl;7:smallNumber++;8:cout<<"smallnumber:"<<smallNumber<<endl;9:smallNumber++;10:cout<<"smallnumber:"<<smallNumber<<endl;11:return0;12:}Результат:smallnumber:65535smallnumber:0smallnumbar:1АНАЛИЗ:Встроке4объявляетсяпеременнаяsmallNumberтипаunsignedshortint,котораяна моем компьютере является двухбайтовой, способной хранить значение между 0 и 65 535.
Встроке 5 переменной smallNumber присваивается максимальное значение, которое в строке 6выводитсянаэкран.В строке 7 переменная smallNumber увеличивается на 1. Приращение осуществляется спомощью оператора инкремента, имеющего вид двух символов плюс (++). Следовательно,значениепеременнойsmallNumberдолжностать65536.Однакопеременнаятипаunsignedshortint не может хранить число, большее 65 535, поэтому ее значение сбрасывается в 0, который ивыводитсявстроке8.В строке 9 переменная smallNumber вновь увеличивается на единицу, после чего ее новоезначениевыводитсянаэкран.ПереполнениезнаковыхцелочисленныхзначенийЗнаковые целые отличаются от беззнаковых тем, что половина этих значений всегодиапазона — отрицательные числа. При выходе за пределы максимального положительногозначения переменная принимает минимальное отрицательное значение.
В листинге 3.5показано, что происходит, если добавить единицу к максимальному положительному числу,хранящемусявпеременнойтипаshortint.Листинг3.5.Примерпереполнениязнаковойцелойпеременной1:#include<iostream.h>2:intmain()3:{4:shortintsmallNumber;5:smallNumber=32767;6:cout<<"smallnumber:"<<smallNumber<<endl;7:smallNumber++;8:cout<<"smallnumber:"<<smallNumber<<endl;9:smallNumber++;10:cout<<"smallnumber:"<<smallNumber<<endl;11:return0;12:}Анализ:Встроке4переменнаяsmallNumberобъявляетсянаэтотразкороткойцелой(shortint) со знаком (если в объявлении переменной ключевое слово unsigned отсутствует, т.е.