Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


ќбласть видимости и врем€ жизни объектов.

ќбъ€вление и определение функций. ¬ызов функции.

Ћюба€ программа на C++ состоит из функций, одна из которых должна иметь им€ main (с нее начинаетс€ выполнение программы). ‘ункци€ начинает выпол≠н€тьс€ в момент вызова. Ћюба€ функци€ должна быть объ€влена и определена.

ќбъ€вление функции (прототип, заголовок, сигнатура) задает ее им€, тип возвра≠щаемого значени€ и список передаваемых параметров. ќпределение функции со≠ держит, кроме объ€влени€, тело функции, представл€ющее собой последова≠тельность операторов и описаний в фигурных скобках.

–ассмотрим составные части определени€:

Ј — помощью необ€зательного модификатора класс можно €вно задать область видимости функции, использу€ ключевые слова extern (глобальна€ видимость во всех модул€х программы) и static (видимость только в пределах модул€, в котором определена функци€).

Ј “ип возвращаемого функцией значени€ может быть любым, кроме массива и функции. ≈сли функци€ не должна возвращать значение, указываетс€ тип void.

Ј —писок параметров определ€ет величины, которые требуетс€ передать в функ≠цию при ее вызове. Ёлементы списка параметров раздел€ютс€ зап€тыми.

¬ определении, в объ€влении и при вызове одной и той же функции типы и пор€док следовани€ параметров должны совпадать.

ƒл€ вызова функции в простейшем случае нужно указать ее им€, за которым в круглых скобках через зап€тую перечисл€ютс€ имена передаваемых аргументов. ¬ызов функции может находитьс€ в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функци€. ≈сли тип возвра≠щаемого функцией значени€ не void, она может входить в состав выражений или, в частном случае, располагатьс€ в правой части оператора присваивани€.

‘ормальные и фактические параметры. ћеханизмы их передачи.

ћеханизм параметров €вл€етс€ основным способом обмена информацией между вызываемой и вызывающей функци€ми. ѕараметры, перечисленные в заголовке описани€ функции, называютс€ формальными параметрами, или просто пара≠ метрами, а записанные в операторе вызова функции Ч фактическими парамет≠рами, или аргументами.

—уществует два способа передачи параметров в функцию: по значению и по адресу. ѕри передаче по значению в стек занос€тс€ копии значений аргументов, и опера≠ торы функции работают с этими копи€ми. ƒоступа к исходным значени€м пара≠ метров у функции нет, а, следовательно, нет и возможности их изменить. ѕри передаче по адресу в стек занос€тс€ копии адресов аргументов, а функци€ осуществл€ет доступ к €чейкам пам€ти по этим адресам и может изменить ис≠ходные значени€ аргументов.

ѕерезагрузка функций.

»спользование не≠ скольких функций с одним и тем же именем, но с различными типами парамет≠ров, называетс€ перегрузкой функций.  омпил€тор определ€ет, какую именно функцию требуетс€ вызвать, по типу фактических параметров. Ётот процесс называетс€ разрешением перегрузки.

ћеханизм разрешени€ основан на достаточно сложном наборе правил, смысл которых сводитс€ к тому, чтобы использовать функцию с наиболее подход€щими аргументами и выдать сообще≠ние, если такой не найдетс€.

≈сли точного соответстви€ не найдено, выполн€ютс€ продвижени€ пор€дковых типов в соответствии с общими правилами. ƒалее выполн€ютс€ стандартные преобразо≠вани€ типов или указателей. —ледующим шагом €вл€етс€ выполнение преобразований типа, заданных пользователем, а также поиск соответствий за счет переменного числа аргументов функций. ≈сли соответствие на одном и том же этапе может быть получено более чем одним способом, вызов считаетс€ неоднозначным и выдаетс€ сообщение об ошибке.

√лобальные переменные.

√лобальные переменные видны во всех функци€х, где не описаны локальные пе≠ременные с теми же именами, поэтому использовать их дл€ передачи данных между функци€ми очень легко. “ем не менее это не рекомендуетс€, поскольку затрудн€ет отладку программы и преп€тствует помещению функций в библиоте≠ки общего пользовани€. Ќужно стремитьс€ к тому, чтобы функции были макси≠мально независимы, а их интерфейс полностью определ€лс€ прототипом функ≠ции.

ќбласть видимости и врем€ жизни объектов.

¬рем€ жизни переменной может быть глобальным и локальным. ѕеременна€ с глобальным временем жизни характеризуетс€ тем, что в течение всего времени выполнени€ программы с ней ассоциирована €чейка пам€ти и значение. ѕеременной с локальным временем жизни выдел€етс€ нова€ €чейка пам€ти при каждом входе в блок, в котором она определена или объ€влена. ¬рем€ жизни функции всегда глобально.

ќбласть видимости объекта (переменной или функции) определ€ет, в каких участках программы допустимо использование имени этого объекта.

ќбласть видимости имени начинаетс€ в точке объ€влени€, точнее, сразу после объ€вител€, но перед инициализатором. ѕоэтому допускаетс€ использование имени в качестве инициализирующего значени€ дл€ себ€ самого.

 лассы пам€ти.

 ласс пам€ти определ€ет пор€док размещени€ объекта в пам€ти. –азличают автоматический и статический классы пам€ти. C++ располагает четырьм€ спецификаторами класса пам€ти:1) auto 2) register 3) static 4) extern

ѕо два дл€ обозначени€ принадлежности к автоматическому и статическому классам пам€ти.

¬ свою очередь, статический класс пам€ти может быть локальным (внутренним) или глобальным (внешним).

—пецификаторы позвол€ют определить класс пам€ти определ€емого объекта:

Ј auto. Ётот спецификатор автоматического класса пам€ти указывает на то, что объект располагаетс€ в локальной (или автоматически распредел€емой) пам€ти. ќбъекты, имена которых объ€вл€ютс€ со спецификатором auto, размещаютс€ в локальной пам€ти непосредственно перед началом выполнени€ функции или блока операторов.

Ј register. ≈щЄ один спецификатор автоматического класса пам€ти. ѕримен€етс€ к объектам, по умолчанию располагаемым в локальной пам€ти. ѕредставл€ет из себ€ "ненав€зчивую просьбу" к трансл€тору (если это возможно) о размещении значений объектов, объ€вленных со спецификатором register в одном из доступных регистров, а не в локальной пам€ти

Ј static. —пецификатор внутреннего статического класса пам€ти. ѕримен€етс€ только(!) к именам объектов и функций. ¬ C++ этот спецификатор имеет два значени€. ѕервое означает, что определ€емый объект располагаетс€ по фиксированному адресу. “ем самым обеспечиваетс€ существование объекта с момента его определени€ до конца выполнени€ программы. ¬торое значение означает локальность.

Ј extern. —пецификатор внешнего статического класса пам€ти. ќбеспечивает существование объекта с момента его определени€ до конца выполнени€ программы. ќбъект, объ€вленный со спецификатором extern доступен во всех модул€х программы, то есть глобален.

¬ыбор класса пам€ти, помимо €вных спецификаторов, зависит от размещени€ определени€ или объ€влени€ в тексте программы. ћодуль, функци€, блок могут включать соответствующие операторы объ€влени€ или определени€, причЄм вс€кий раз определ€емый объект будет размещатьс€ в строго определЄнных област€х пам€ти.

–екурсивные функции.

–екурсивной называетс€ функци€, котора€ вызывает саму себ€. “ака€ рекурси€ называетс€ пр€мой. —уществует еще косвенна€ рекурси€, когда две или более функций вызывают друг друга. ≈сли функци€ вызывает себ€, в стеке создаетс€ копи€ значений ее параметров, как и при вызове обычной функции, после чего управление передаетс€ первому исполн€емому оператору функции. ѕри повтор≠ ном вызове этот процесс повтор€етс€. ясно, что дл€ завершени€ вычислений ка≠жда€ рекурсивна€ функци€ должна содержать хот€ бы одну нерекурсивную ветвь алгоритма, заканчивающуюс€ оператором возврата. ѕри завершении функ≠ции соответствующа€ часть стека освобождаетс€, и управление передаетс€ вызы≠вающей функции, выполнение которой продолжаетс€ с точки, следующей за ре≠ курсивным вызовом.

–екурсивные функции чаще всего примен€ют дл€ компактной реализации ре≠ курсивных алгоритмов, а также дл€ работы со структурами данных, описанными рекурсивно, например, с двоичными деревь€ми. Ћюбую рекурсивную функцию можно реализовать без применени€ рекурсии, дл€ этого программист должен обеспечить хранение всех необходимых данных самосто€тельно. ƒосто≠инством рекурсии €вл€етс€ компактна€ запись, а недостатками Ч расход време≠ни и пам€ти на повторные вызовы функции и передачу ей копий параметров, и, главное, опасность переполнени€ стека.

 

ѕодробное изложение теоретических вопросов, затронутых в первой лекции, можно найти в литературе [1, 3]. ѕрактические аспекты этих вопросов можно отыскать в работах [2, 4,5,6,7,8].

—писок рекомендуемой литературы

а) основна€ литература:

1. ѕавловска€ “.ј. —/C++: ѕрограммирование га €зыке высокого уровн€. ”чебник. Ц —ѕб.: ѕитер,2001.

2. Ўумова ≈.ќ. ѕрограммирование на €зыке высокого уровн€: ”чеб. ѕособие. Ц —ѕб.:—«“”, 2001.

3. ћакаров ¬.Ћ. ѕрограммирование и основы алгоритмизации: ”чеб. ѕособие. Ц —ѕб.:—«“”, 2003.

б) дополнительна€ литература:

4. Ѕерезин Ѕ.»., Ѕерезин —.Ѕ. Ќачальный курс — и —++. -: ƒиалог Ц ћифи, 1997.

5. ƒжесс Ћиберти. ќсвой самосто€тельно —++ за 21 день. - ћ.: »здательский дом Ђ¬иль€мсї, 2001.

6. Ќеформальное виденье в —++ и Turbo Vision. Ц √алере€ Ђѕетропольї, 1992.

7. ѕетухова Ќ.ћ. ¬ычислительна€ техника и программирование.  онспект лекций. Ц Ћ.: —«ѕ», 1991.

в) проча€ литература:

8. http://www.tdoc.ru/c/programming/cpp/cpp-velvet-way-page23.html

9. http://citforum.ru/programming/cpp_march/cpp_022.shtml

10. http://mycpp.ru/cpp/book/c08.html

«нани€ следует самосто€тельно проверить путем ответов на контрольные вопросы:

1. ¬ чем разница между объ€влением прототипа и определением функции?

2. ƒолжны ли имена параметров, указанные в определение и вызове функции, соответствовать друг другу?

3.  ак следует объ€вл€ть функцию, если она не возвращает значени€?

4. „то такое локальна€ переменна€?

5. „то такое глобальна€ переменна€?

6. „то такое область видимости?

7. „то такое перегрузка функции?

8. „то такое рекурси€?

9.  огда следует использовать глобальные переменные?

10.   какому классу пам€ти будет относитьс€ переменна€ по умолчанию?



<== предыдуща€ лекци€ | следующа€ лекци€ ==>
“ребовани€ к качествупримен€емых материалов. √ќ—“ 10296-79*. »зол.“ехнические услови€. | ќсновные макроэкономические параметры в соответствии с их циклическими свойствами
ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2016-12-05; ћы поможем в написании ваших работ!; просмотров: 327 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

Ѕутерброд по-студенчески - кусок черного хлеба, а на него кусок белого. © Ќеизвестно
==> читать все изречени€...

668 - | 720 -


© 2015-2023 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.012 с.