
алгоритмы и програмування / Книги / Шилдт Г. C++ Руководство для начинающих
.pdf22 Глава 1. ОСНОВЫ С++
Если и существует один компьютерный язык, который определяет суп) со
BpeMeHHoro программирования, то, безусловно, зто С++. Язык С++ предназна
чен для разработки высокопроизводительного llрограммного обеспечения. ЕI"O синтаксис стал стандартом для других профессиональных языков программи
рова.ния, а его принципы ра.lработки отражают идеи развития вычислительной
техники в целом. С++ послужил фундаментом для разработки языков будущего. Например, K3KJava, так и С# - прямые ПОТОМIСИ языка С++. СеГОДIIЯ быть про фессиональныM программистом высокого клас,:а означает быть компетентным в
С++. С++ - это ключ J( современному програм\iированию.
Цель этоro модуля - представить С++ в историческом аспекте, проследить
его истоки, проанализировuть его взаимоотношения с неrюсредствснным пред
шественником (С), рассмотреть ero возможности (области ПРИМСНСIIИЯ) и ЩНШ ципы программирования, которые он поддерживает. Самым трудным 8 изучении
языка программирования, безусловно. является то, что НИ один его элемеlН не
существует изолировашю от других. Компоненты языка работают вместе, можно
сказать, в дружном "коллективе". Такая тесная взаимосвязь усложняет рассмо
трение одного аспекта С++ без изучения других. Зачастую обсуждение одного
средства предусматривает предварительное знакомство с дрynlМ. Для преодоле
ния подобных трудностей в этом модуле ПРИВОДIIТСЯ краткое описание таЮIХ эле ментов С++, как общий формат С++-программы, основные инструкции управле ния и операторы. При этом мы не будем пока УI'лубляться в детали, а сосредото
чимся па общих концепциях создания С++-программы.
ВАЖНОI |
|
,ММ ИЭИСТnРИId СО3ДnWИАu-С+* |
/ |
История создания С++ начинается с языка С. И немудреlfО: С++ построеllllа фундаменте С. С++ и в самом деле представляе1" собой супермножество язЬ/ка С. С++ можно назвать расширенной и улучшешю~r версией языка С. предназначен
ной для поддержки объектно-ориентированного lIрограммирования (ero ПРИН
ципы описаны ниже в этом модуле). С++ также включает ряд других усовершен ствований ЯЗЫI(а С, например расширенный набор библиотеЧIIЫХ функций. При Э1'ОМ "вкус И запах" С++ унаследовал непосредственно из языка С. Чтобы до кон
ца понять и оценить достоинства С++, необходимо понять все "как" и "почему" n
отношении языка С.
С++: PYI<OBOACтeO ДМ! начинающих 23
Язык С: начало эры современного
программирования
Изобретение языка С отмстило начало новой эры COBpeMeHHoro программи рования. Его влияние нельзя было переоцеtlить, поскольку он коренным образом
изменил подход ~ программированию и его восприятие. Его синтаксис и принци
I1Ы разработки оказали влияние на ВСС последующие компьютерные языки, по
этому язык С можно назвать одной из основных революционных СИЛ в развитии
вычислительной техники.
Язык С изобрел Дэнис Ритчи (Dennis Ritchie) для компьютера РОР-ll (раз работка компании ОЕС - Digita) Equipment Corporation), который работал под
управлением операционной системы (ОС) UNIX. Язык С - это результат про
цесса разработки, который сначала был связан с другим языком - BCPL, создан ным Мартином Ричардсом (Martin Riсlшгds). Язык BCPL ИНДУUИРОВaJI появле ние языка, получившего lIазвание В (его автор - Кен Томпсон (Кеп Thompson»,
который в свою очередь в lIачале 70-х годов привел к разработке языка С.
Язык С стал считаться первым современным "языком программиста", по
скольку до его изобретения l(!Омпьютерные языки в основном разрабатывались либо как учебные упражнения, либо как результат деятельности бюрократиче ских структур. С языком С все обстояло иначе. Он был задуман и разработан ре
альными, практикующими программиста.\1И и отражал их подход к I1РОГРамми
рованию. Его средства были многократно обдуманы, отточены и протестированы людьми, которые действительно работали с этим языком. В результате этого про
цесса появился язык, который понравился MHomM программистам-практикам и
быстро распространился по всему миру. Ero невиданный успех обусловило то,
что он был разработан программистами для программистов.
Язык С возник в результате реВОЛЮ1{ИИ cmpyкmypup08a,molO npozpa.AWupo-
вания БО-х годов. До появлеllИЯ структурироваююго программировзния 060-
значились проблемы в написания больших программ, поскольку программисты
пользовались логикой, которая ПРИ80ДИJlа к созданию так наЗЫI~аемого "cnareT-
ти-кода", состоящего из множества переХОДО8, последовательность которых было
трудно проследить. В структурированных ЯЗЫI<аХ программирования эта пробле
ма реmалась путем Ifсполь:ювания хорошо определенных инструкций управле ния, подпрограмм, локальных персменных и других средств. Появление структу
рированных языков позволило писать уже довольно большие nporpaмМbl.
Несмотря на то что в то время уже существовали другие структурированные
языки (например Pascal), С стал первым языком, в котором успешно сочеталисъ
мощь, изящество и выразительность. Ero лаконизм, простота синтаксиса и фило софия БЫЛII I-laСl'ОЛЬКО ПРI1Dлекательными, что в мире программирования непо-
+
+
u-
2i
aI
О
:I:
U
О
24 !Лава 1. Основы С++
стижимо быстро образовалась целая армия его приверженцев. С точки зрения
сегодняшнего ДНЯ этот феномен даже трудно понять, но, тем не менее, язык С
стал своеl'ородадолrожданным "свежим ветром". который вдохнул в программи
рование новую жизнь. В результате С был общепризнан как самый популярный структурированный язык 1980-х годов.
ПреДПОСblЛКИ возникновения языка С++
Приведенная выше характеристика языка С может вызвать справедливое не доумение: зачем же тогда, мол, был изобретен я;tык С++? Если С - такой успеш ный и полезный язык, то почему возникла необходимость в чем-то еще? Оказы вается, все дело в сложности. На протяжении всей истории программирования
усложнение программ заставляло программистов искать пути, которые бы позво
лили справиться со сложностью. Язык С++ можно считать одним из способов ее
преодоления. Попробуем лучше раскрыть взаимосвязь между постоянно возрас
тающей сложностью программ и путями развития языков программирования.
Отношение к программированию резко изменflЛОСЬ с момента изобретения КО.\{
пьютера. Например, программированиедля первых вычислительных машин состоя
ло в переключении тумблеров на их передней панели таким образом, чтобы их поло
жение соответствовало двоичным кодам машинных команд. Пока длины программ не превышали нескольких сотен команд, такой метод еще имел право на существо
вание. Но по мере их дальнейшего роста был изобретен язык ассемблер, чтобы про
граммисты могли использовать символическое представление машинных команд.
Поскольку программы продолжали расти в размерах, желание справиться с более высоким уровнем сложности ВЫЗВало появление ЯЗЫКОВ высокого уровня, разработ ка которых дала программистам больше инструментов (новых и разных).
Первым широко распространенным языком программирования был, конечно же, FORTRAN. Несмотря на то что это был очень значительный шаг на пути про гресса в области программирования, FORTRAN все же трудно назвать языком, который способствовал написанию ясных и простых для понимания программ.
Шестидесятые годы двадцатого столетия считаются·периодом появления струк турированного программирования. Именно такой метод программирования и
был реализован в языке С. С помощью структурированных языков программи рования можно было писать программы средней сложности, причем без особых
героических усилий со стороны программиста. Но если программный проект до
стигал определенного размера, то даже с использованием упомянутых структури
рованных методов его сложность резко возрастала и оказывалась непреодолимой
для возможностей программиста. К концу 70-х к "критической" точке подошло
довольно много проектов.
С++: PYI<080ACTBO ДМl начинающих 25
Решитьэту проблему "DЗЯЛИСЬ" новыетехнолоmи программирования. Одна из них получила название объектно-ориентированного nрограм.мuрованuя (ООП).
Вооружившись методами 00 П, программист мог справляться с программами го
раздо большего размера, чем прежде. Но язык С не поддерживал методов ооп. Стремление получить объектно-ориентированную версию языка С в конце кон
цов и привело к созданию С++.
Несмотря на то что язык С был одним из самых любимых и распространен
ных профессиональных языков программирования, настало время, когда его возможности по написанию сложных программ достигли своего предела. Же
лание преодолеть этот барьер и помочь программисту легко справляться с еще
более объемными и сложными программами - вот что стало основной причи
ной создания С++.
Рождение С++
Язык С++ был создан Бьерном Страуструпом (Bjame Stroustrup) в 1979 году
в компании ВеН Laboratories (г. Муррей-Хилл, шт. Нью-Джерси). Сиачала но вый язык получил имя "С с классами" (С with Classes), но в 1983 году он стал
называться С++.
Страуструп построил С++ на фундаменте языка С, включающем все его
средства, атрибуты и основные достоинства. Для него также остается в силе
принцип С, согласно которому программист, а не язык, несет ответственность
за результаты работы своей программы. Именно этот момент позволяет понять, что изобретение С++ не было попыткой создать новый язык программирова ния. Это было скорее усовершенствование уже существующего (и при этом
весьма успешного) языка.
Большинство новшеств, которыми Страуструп обогатил язык С, было предна значенодля поддержки объектно-ориентированного программирования. По сути,
С++ стал объектно-ориентированной версией языка С. Взяв язык С за основу,
Страуструп подготовил плавный переход к ооп. Теперь, вместо того, чтобы из учать совершенно новый язык, С-программисту достаточно было·освоить только ряд новых средств, и он мог пожинать плоды использования 06ъектно-ориенти
рованной технологии программироваиия.
Создавая С++, Страуструп понимал, иасколько важно, сохранив изначальную
суть языка С, Т.е. его зффективность, гибкость и принципы разработки, внести в
него поддержку объеКТlю-ориеllТИРОВaJlНОl"O орограммирования. К счастью, эта
цель была достигнута. С++ по-прежнему предоставляет программисту свободу
действий и власть над компьютером (которые были присущи языку С), значи тельно расширяя при этом его (программиста) возможности за счет использова
ния объектов.
:j: u
iЗ
о
1:
()
О
26 Глава 1. Основы С++
Несмотря на то что С++ изначально был I-I.щелен на поддержку очень БО.1Ь
ПlИX программ, этим, Конечно же, его использование не ограничивалось. И 8 са
мом деле, объектно-ориентированные средства С++ можно эффективно приме пять практически к любой задаче программирования. Неудивительно, что С++
используется для создания компиляторов, peДёJKTOpOB, компьютерных игр и про
грамм сетевого обслуживания. Поскольку С++ обладает эффективностью языка
С, то программиое обеспечение многих высокоэффективных систем построено с
использованием С++. Кроме того, С++ - это язык, который чаще всего выбира ется для Wiпdоws-программирования.
Эволюция С++
С момента изобретения С++ претерпел т~,и крупные l1ереработки, причем
каждый раз язык как ДОПОJlllЯЛСЯ новыми средствами, так и в чем-то изменялся.
Первой ревизии он был подвергнут в 1985 году. второй - в 1990, а третья произо
шла в процессе стандартизации, который актюшзировался в начале 1990-х. Спе
циально для этого был сформирован объединенный АNSI/ISО-комитет (я был
его членом), который 25 января 1994 года принял первый проект предложенного
на рассмотрение стандарта. В этот проект БЫЛII включены все средства, впервые
определенные Страуструпом, и добавлены новые. Но в целом он отражал состоя ние С++ на тот момент времени.
Вскоре после завершения работы над первым проектом стандарта С++ про
изошло событие, которое заставило значительно расширить существующий
стандарт. Речь идет о создании'Ллександром Степановым (Alexander Stepanov)
стандартной библиотеки |
шаблонов (Standar<\ Template Library - STL). Как |
вы узнаете позже, STL - |
это набор обобщенных функций, которые можно ис |
пользовать для обработки данных. Он доволыio большой по размеру. Комитет ANSI/ISO проголосовал за включение STL в спеllИфикauию С++. добавление STL расширило сферу рассмотрения средств С++ далеко за пределы исходнuго определения ЯЗblка. Однако ВlUlючение STL. помимо прочего, замедлило процесс стандартизации С++, причем довольно сущест)}еllllO.
Помимо STL, в сам ЯЗblК было добавлено н('сколько новых средств и внесено
множество мелких изменений. Поэтому верси.il С++ после рассмотрения коми
тетом по стандартизацЮ1 стала намного больше и сложнее по сравнению с ис ходным вариантом Страуструпа. Конечный результат работы комитета датиру ется 14 ноября 1997 года, а [lеалыlO ЛNSI/ISО-стандарт языка С++ увидел Сllет
в1998 году. Именно эта спецификация С++ ОnЫЧJlО называется Standard С++.
иименно она описана в данной книге. Эта версия С++ поддерживается всеми
ОСНОВJlЫМИ C++-компилятораМII, включая Vistl<ll С-Н (Мiсrоsоft) и С++ Buildct·
С++: руководство для начинающих 27
(Borland). Поэтому код программ, приведенных в этой ЮiИге. полностью приме
ним ко всем современным С++-средам.
ВАЖНО!
IIII..C8S13hC** с ЯЗЬ'КQМИ 'nуо И с#.
ПОМИМО С++, существуют два других современных языка программирования: java н С#. Язык.Jаvа разработан компанией Sun Microsystems, а С# - компанией
Мicrоsоft. Поскольку иногда возникает путаница относительно того, какое ОТIЮ
шеtlНС эти два языка имеют к С++, попробуем внести ясность о этот вопрос.
С++ является родительским языком· дляjаv~ и'С#. И хотя разработчикиjаvа
и С# добаВIIЛИ к псрвоисточнику, удалили из него или модифицировали различ
ные средства, D целом синтаксис этих трех языков практически идентичен. Более
того, объектная модель, используемая С++, подобна объеК11iЫМ моделям языков
.Java и С#. Наконец, очень сходно общее впечатщшие и ощущение от использо вания всех этих языков. Это зиачит, что, зная С++, вы можете легко изучитьjаvа или С#. Схожесть синтаксисов и объектных моделей - одна из причин быстрого
освоения (11 одобрения) этих двух языков многими опытными С++-программи стам". Обратная ситуация также имеет место: если вы знаетеjаvа или С#, изуче
ние С++ не доставит вам хлопот.
Основное различие между С++, Java и С# заключается в типе вычислитель
ной среды, для которой разрабатывался каждый из этих языков. С++ создавался
с целью lIаписания высокоэффективных программ, предназначеНJlЫХ для выпол нения под управлением Оllределенной операционной системы и в расчете на ЦП конкретного типа. Например, если вы хотите написать высокоэффективную про
грамму для выполнения на процессоре Intel Pentium под управлением операци онной системы Windows, лучше всего использовать для этого язык С++.
Языки java и С# ра.lработаны в ответ на Уliикальные потребности сильно рас
пределенной сетевой среды Internet. (При разработке С# также ставилась цель
упростить СО~iДание программных компонентов.) Intemet связывает множество
различных типов ЦП и операционных систем. Поэтому возможность создания межплатформеНIIОГО (совместимого с несколькими операционными средами) переносимого программного кода для 1nternet при решеНИII некоторых задач ста
ло определяющим УСЛОDием при выборе языка программирования.
IIерпым языком, отвечающим таким требованиям, был ]ava. Используя Java.
можно написать программу, которая будет выполняться в различных вычисли тельных средах, т.е. в широком диапазоне операционных систем и типов цп.
TaKIIM образом. Java-программа может свободно "бороздить просторы" Intemet.
Несмотря на то чтоjаvа позволяет создавать переиосимый ПРОJ"раммный код, ко-
+
+
u
~
аз
О
:J:
()
О
28 Глава 1. Основы С++
торый работает в сильно распределенной среде, цена этой переносимости - эф фективность. )аvа-программы выполняются медленнее, чем С++-программы. То же справедливо и дЛЯ С#. Поэтому, если вы хотите создавать высокоэффектив ные приложения, используйте С++. Если же вам нужны переносимые програм МЫ, используйте]аvа или С#.
Спросим у опытного программиста
Вопрос. каким образом. 1I3ы'"Java u С# позволяют созihuJamьм.eжnлoтфopм.ен.
ные (coвм.ecmuм.ыe с неclcолышAIu оrrераЦUОННbllllll cpeдaмu) nepeнocu JltЫe npozpaJl4JllЫ u м..ем.у С nом.ощью С++ невО3АСОЖНО iJocmuчь mmc010
жериультamа?
Ответ. Все дело в типе объектного кода, создаваемого компиляторам В результате работы С++-компилятора мы получаем машинный код, ко
торый непосредственно выполняется конкретным центральным процеl;
сором (ЦП). Друrими словами, С++-компилятор связан с конкретными ЦП и операционной системой. Если нужно выполнить С++-проrpамму
под управлением другой операционной системой, необходимо пt>реком
пилировать ее и получить машинный lCOn, подходящий для данной среды.
Поэтому, чтобы С++-программа могла выполняться в различных средах,
нужно создать несколько выполняемых версий этой проrpaммы.
Используя языкиjаvа и С#, можно добиться переносимости програММНО
го кода за счет специальной компиляции проrpамм, позволяющей пере
вести исходный проrpаммный код на промежуточный язык, именуемый nсевдо"одом. Для java-проrpамм этI)т промежуточный язык называют
байт-"одом (bytecode), Т.е. машинно-независимым кодом, генерируемым jаvа-комnилятором. В результате КОМНИЛЯЦИИ C#-nporpaммw получается не исполняемый I(ОД, а файл, который содержит специальный псевдоко;х,
именуемый nромежуmочнbI.М.язы."ОА! Мicrosоft(Microsoft Intemlediate
Language - MSI L). В обоих случаях :IТOT псевдокод ВЫnОJПfяется специ
альной операционной системой, которая дляjаvа называется вuртуШlЬ
НОй машuнойjаvа Оауа Virtual MaclUne - jVM), а ДЛЯ С# - средством Соттоп Language Runtime (CLR). Следовательно, java-программа сможет выполняться D любой среде, содержащей JVM, а C#-проrpамма -
в любой среде, в которой реализовано средство CLR.
ПОСКОЛЬКУ специальные операционные системы ДЛЯ выполнения java-
иС#-кода занимают промежуточное местоположение между проrpаммой
ицп, выполнениеjаvа- и С#-программ сопряжено с расходом определен ных системных ресурсов, что совершеllНО излишне при ВЫПОJПfеНЮI C+~'
программ. Вот поэтому С++-программы обbIЧНО выполняются быстрее,
чем эквивалентные ПРОllJ3.ммы, написанные Hajava и С#.
С++: руководство ДЛ)) начинающих 29
и последнее. Языки C++,java и С# предназначены для решения различных классов задач. Поэтому вопрос "Какой язык лучше?" поставлен некорректно.
Уместнее сформулировать вопрос иначе: "Какой язык наиболее подходит для ре
шения данной задачи?".
~ПРОСЫДI\'iIтекущегоl<онтрОл'il________
1.От какого языка программирования произошел С++?
2.Какой основной фактор обусловил создание С++?
3.Верно ли, что С++ является предком языковJava и С#?·
ВАЖНОI
58 0бьектнn-nриеЫZИРОВQнное
программирование
Основополагающими для разработки С++ стали принципы объектно-ори
ентированного программирования (ООП). Именно ООП явилось толчком для создания С++. А раз так, то, прежде чем мы напишем самую простую С++-про грамму, важно понять, что собой представляют принципы ООП.
Объектно-ориентированное программирование объединило лучшие идеи
структурированного с рядом мощных концепций, которые способствуют более эффективной организации программ. В самом общем смысле любую программу
можно организовать одним из двух способов: опираясь на код (действия) или на данные (информация, на l<ОТОРУЮ направлены эти действия). При использова
нии лишь методов структурированного программирования программы обычно опираются на код. Такой подход можно выразить в использовании "кода, дей
ствующего на данные".
Механизм объектно-ориентированного программирования основан на выборе второго способа. В этом случае ключевым принципом организации программ яв ляется использование "данных, управляющих доступом !( коду". В любом 06ъек
тно-ориентированном языке программирования определяются данные и процеду
ры, которые разрешается применить к этим данным. Таким образом, тип данных в
точности определяет, операции какого вида можно примешпь к этим данным.
1. Язык С++ произошел от С.
2.Основной фактор создания С++ - повышеIше сложности ПРОll>амм.
3.Верно: С++ действительно является родительским языком для Java и С#.
t
u
:D
ID
О
I
U
О
30 Глава 1. Основы С++
ДЛЯ поддержки принципов объектно-ориеtIтированноro программирования все языки ООП, включая С++, характеризуются следующими общими свойства
ми: иmcaпсуляцией, полиморфизмом н наследованием. Рассмотрим кратко каж
дое из ЭТИХ свойств.
ИнкапсуМlЦИЯ
Инкапсуляция - это такой механизм программирования, который связывает
воедино код и данные, им обрабатываемые, чтобы обезопасить их как от внешне
го вмешательства, так и от неправильного исrlOJlьзоваиия. В объекпю-ориеНnf
рованиом языке код и данные могут быть связаны способом, при котором созда ется самодостаточный черныйЯЩlJК. В этом "яшике" содержатся все необходимые (для обеспечения самостоятельности) данные If код. При таком связывании кода
и данных создается объект, Т.е. 06ьекm - это КО:iСТРУКЦИЯ, котuрая поддерживает
инка.псуляцию.
Спросим у опытного программиста
Вопрос. Я СЛЫIIUVI, .,то mep.JtIUH ".JtIemoij" прlLNeшrетCR " noдnpozpa.J/l..Jtle. Тогда
прагда ли то, что .JtIe1JIOiJ - это то же Ctl.JtlOe, что и ФУJlJСЦU?
Ответ. В общем CMblCJIe ответ: да. Термин "метод" популяри:ювался t: появлени·
ем языка Java. То, что C++-програММIIСТ называет функцией, Jаvа-про·
граммист называет м('Тодом. С#-программисты также используют термltн
Uметод". В виду такой широкой популярности этот термин все чаще r-та.1И применять и к C++-фУНКlIии.
Внутри объекта код, данные или обе эти составляющие могут быть закРЫТЫ\fИ
в "рамках" этогообъекта или открытыми. Закрытый код (или данные) известен и
доступен только другим частям того же объекта. Другими словами, к закрытому
коду или данным не может получить доступ та часть программы, которая суще
ствует вне этого объекта. Открытый код (или данные) доступен любым другим частям программы, даже если они определены [. других объектах. Обычно откры тые части объекта используются для предоставления управляемого интерфейса
с закрытыми элементами объекта.
Базовой единицей инкапсуляции является класс. Класс определяет новый тип
данных, который задает формат 06ьекта. Класс' включает как данные, так и код,
предназначенный ДЛЯ выполнения над этими данными. Следовательно, класс
связы8em данные с "адом. В С++ спецификация класса используется для по-
С++: PYI(OBOACTBO ДЛ~ начинающих 31
строения объектов. Обьекты - это экземпляры класса. По сути, lUIacc представ
ляет собой набор планов, которые определяют, К3..I( Cl'pUlITb объект.
В lUIacce данные объявляются в виде nереме1lЯЫХ. а КОД оформляется в 8ИДt:
фуmщий (1I0Дl1рограмм). Функции и переменныс, СОС1'авляющнс класс, назьша
ются его членами. Таким образом, переменная, объявленная в КЛi!ссе, называется Ч:lеIlОМ дml1lЫХ, а функция, объявленная в классе, назьшаеТС>1 ФуIt1Щllей-ч/leIIOАI. ИlIогда вместо термина I(лен дmmых используется теРМЮI lzере.ме//uйя эюеАmляра
(или nереАfеllНая реализации).
ПолиморфИЗМ
Полиморфизм (от греческого <:Л.ова polym01p11ism, означающего "много форм") -
это свойство, позволяющее исnользовать один интерфейс для целого lUIacca дей
ствиii. В качестве простого примера полиморфизма можно привести руль автомоби ля. Лля руля (т.е. шперфейса) безразлично, какой пш рулеоого механизма исполь зуется u автомобиле. Другим словами, руль работаетодинаково. не:iависимо от того, оснащеli ли автомобиль рулевым управлением прямоro деЙСТВIIЯ (без усилителя),
рулевым управлением с УСИЛИТeJlем или механизмом реечной lIсредачи. Если вы
знаете, как обращаться с рулем, вы сможете вести автомоБИЛI, любого ТИП8.
ТОТ же IIРИНЦИП можно применить к программировClНИJO. Рассмотрим, напри мер, стек, или список, добавление и удаление элементов к !{оторому осуществля
ется по ПРИIiЦИПУ "последним прибыл - пеРПl)IМ обслужен". У "ас может быть
программа, А которой используются три различных типа стека. Один стек пред назначен ДЛЯ цеЛОЧJ1СЛСIШЫХ значений, второй - для значений с плавающей точ
кой и третий - для символов. AлrОРlfТМ реализации всех стеков - один и тот
же. несмотря на то, что 1:1 них хранятся данные различных типов. В необъектно
ориентированном языке программисту пришлось бы создать три различных ,..а
бора подпрограмм обслуживания с.тека, причем подпрограммы должны были бы
иметь различные имена, а каждый набор - собственный интерфейс. Но благо даря полиморфизму в С++ можно создать одии общий набор подпрограмм (один интерфейс), который подходит для всех трех конкретных СИ1'УациЙ. Таким обра
зом, зная, как использовать один стек, вы можете использовать все остальные.
В более общем виде концепция полиморфизма выражается фРaзQй "один ин
терфейс - много методов". Это означает, что для группы связанных действий
можно использовать один обобщенный интерфейс. Полиморфизм позволяет по
низить уровень сложности за счет возможности применения одного и того же ИН
терфейса ДЛЯ задания общею класса действий. Выбор же кою(рemuоzo деиС1llfJUЯ
(т.е. функции) примени.тельно к той или иной ситуации ложится "на плечи" ком
пилятора. Вам, как программисту, не нужно делать этот выбор вручную. Ваша
задача - использовать общий mперфеЙс.
+
+
u
1i
CD
О
1:
U
О