Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
71
Добавлен:
26.05.2014
Размер:
71.28 Кб
Скачать

ЉђЂ’Љ€‰ ЋЃ‡Ћђ ‘++

"Ќ з­Ґ¬ б в®Ј®, зв® ў§¤Ґа­Ґ¬
ўбҐе нвЁе § Є®­­ЁЄ®ў, п§лЄ®ўҐ¤®ў".
("Љ®а®«м ѓҐ­аЁе VI", ¤Ґ©бвўЁҐ II)

‚ нв®© Ј« ўҐ ᮤҐа¦Ёвбп Єа вЄЁ© ®Ў§®а ®б­®ў­ле Є®­жҐЇжЁ© Ё Є®­бвагЄжЁ©
п§лЄ  ‘++. Ћ­ б«г¦Ёв ¤«п ЎҐЈ«®Ј® §­ Є®¬бвў  б п§лЄ®¬. Џ®¤а®Ў­®Ґ ®ЇЁб ­ЁҐ
ў®§¬®¦­®б⥩ п§лЄ  Ё ¬Ґв®¤®ў Їа®Ја ¬¬Ёа®ў ­Ёп ­  ­Ґ¬ ¤ Ґвбп ў б«Ґ¤гойЁе
Ј« ў е. ђ §Ј®ў®а ўҐ¤Ґвбп ў ®б­®ў­®¬ ў®ЄагЈ  Ўбва ЄжЁЁ ¤ ­­ле Ё
®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп, ­® ЇҐаҐзЁб«повбп Ё ®б­®ў­лҐ
ў®§¬®¦­®бвЁ Їа®жҐ¤га­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп.


1.1 ‚‚…„…Ќ€…

џ§лЄ Їа®Ја ¬¬Ёа®ў ­Ёп ‘++ § ¤г¬лў «бп Є Є п§лЄ, Є®в®ал© Ўг¤Ґв:

- «гзиҐ п§лЄ  ‘;

- Ї®¤¤Ґа¦Ёў вм  Ўбва ЄжЁо ¤ ­­ле;

- Ї®¤¤Ґа¦Ёў вм ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ.

‚ нв®© Ј« ўҐ ®Ўкпб­пҐвбп б¬лб« нвЁе да § ЎҐ§ Ї®¤а®Ў­®Ј® ®ЇЁб ­Ёп
Є®­бвагЄжЁ© п§лЄ .

$$1.2 ᮤҐа¦Ёв ­Ґд®а¬ «м­®Ґ ®ЇЁб ­ЁҐ а §«ЁзЁ© "Їа®жҐ¤га­®Ј®",
"¬®¤г«м­®Ј®" Ё "®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј®" Їа®Ја ¬¬Ёа®ў ­Ёп. ЏаЁўҐ¤Ґ­л
Є®­бвагЄжЁЁ п§лЄ , Є®в®алҐ бгйҐб⢥­­л ¤«п Є ¦¤®Ј® Ё§ ЇҐаҐзЁб«Ґ­­ле бвЁ«Ґ©
Їа®Ја ¬¬Ёа®ў ­Ёп. ‘ў®©б⢥­­л© ‘ бвЁ«м Їа®Ја ¬¬Ёа®ў ­Ёп ®Ўб㦤 Ґвбп ў
а §¤Ґ« е "Їа®жҐ¤га­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ Ё "¬®¤г«м­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ".
џ§лЄ ‘++ - "«гзиЁ© ў аЁ ­в ‘". Ћ­ «гзиҐ Ї®¤¤Ґа¦Ёў Ґв в Є®© бвЁ«м
Їа®Ја ¬¬Ёа®ў ­Ёп, 祬 б ¬ ‘, ЇаЁзҐ¬ нв® ¤Ґ« Ґвбп ЎҐ§ Ї®вҐаЁ Є Є®©-«ЁЎ®
®Ўй­®бвЁ Ё«Ё нд䥪⨢­®бвЁ Ї® ба ў­Ґ­Ёо б ‘. ‚ в® ¦Ґ ўаҐ¬п п§лЄ C
пў«пҐвбп Ї®¤¬­®¦Ґбвў®¬ ‘++. ЂЎбва ЄжЁп ¤ ­­ле Ё ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ
Їа®Ја ¬¬Ёа®ў ­ЁҐ а бб¬ ваЁў овбп Є Є "Ї®¤¤Ґа¦Є   Ўбва ЄжЁЁ ¤ ­­ле" Ё
"Ї®¤¤Ґа¦Є  ®ЎкҐЄв­®- ®аЁҐ­вЁа®ў ­­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп". ЏҐаў п Ў §ЁагҐвбп
­  ў®§¬®¦­®бвЁ ®ЇаҐ¤Ґ«пвм ­®ўлҐ вЁЇл Ё а Ў®в вм б ­Ё¬Ё,   ўв®а п - ­ 
ў®§¬®¦­®бвЁ § ¤ ў вм ЁҐа аеЁо вЁЇ®ў.

$$1.3 ᮤҐа¦Ёв ®ЇЁб ­ЁҐ ®б­®ў­ле Є®­бвагЄжЁ© ¤«п Їа®жҐ¤га­®Ј® Ё
¬®¤г«м­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп. ‚ з бв­®бвЁ, ®ЇаҐ¤Ґ«повбп дг­ЄжЁЁ, гЄ § вҐ«Ё,
жЁЄ«л, ўў®¤-ўлў®¤ Ё Ї®­пвЁҐ Їа®Ја ¬¬л Є Є б®ў®ЄгЇ­®бвЁ а §¤Ґ«м­®
ва ­б«Ёа㥬ле ¬®¤г«Ґ©. Џ®¤а®Ў­® нвЁ ў®§¬®¦­®бвЁ ®ЇЁб ­л ў Ј« ў е 2, 3 Ё 4.

$$1.4 ᮤҐа¦Ёв ®ЇЁб ­ЁҐ б।бвў, ЇаҐ¤­ §­ зҐ­­ле ¤«п нд䥪⨢­®©
ॠ«Ё§ жЁЁ  Ўбва ЄжЁЁ ¤ ­­ле. ‚ з бв­®бвЁ, ®ЇаҐ¤Ґ«повбп Є« ббл, Їа®б⥩訩
¬Ґе ­Ё§¬ Є®­ва®«п ¤®бвгЇ , Є®­бвагЄв®ал Ё ¤ҐбвагЄв®ал, ЇҐаҐЈаг§Є 
®ЇҐа жЁ©, ЇаҐ®Ўа §®ў ­Ёп Ї®«м§®ў вҐ«мбЄЁе вЁЇ®ў, ®Ўа Ў®вЄ  ®б®Ўле бЁвг жЁ©
Ё и Ў«®­л вЁЇ®ў. Џ®¤а®Ў­® нвЁ ў®§¬®¦­®бвЁ ®ЇЁб ­л ў Ј« ў е 5, 7, 8 Ё 9.

$$1.5 ᮤҐа¦Ёв ®ЇЁб ­ЁҐ б।бвў Ї®¤¤Ґа¦ЄЁ ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј®
Їа®Ја ¬¬Ёа®ў ­Ёп. ‚ з бв­®бвЁ, ®ЇаҐ¤Ґ«повбп Їа®Ё§ў®¤­лҐ Є« ббл Ё
ўЁавг «м­лҐ дг­ЄжЁЁ, ®Ўб㦤 овбп ­ҐЄ®в®алҐ ў®Їа®бл ॠ«Ё§ жЁЁ. ‚ᥠнв®
Ї®¤а®Ў­® Ё§«®¦Ґ­® ў Ј« ўҐ 6.

$$1.6 ᮤҐа¦Ёв ®ЇЁб ­ЁҐ ®ЇаҐ¤Ґ«Ґ­­ле ®Ја ­ЁзҐ­Ё© ­  ЇгвЁ
б®ўҐа襭бвў®ў ­Ёп Є Є п§лЄ®ў Їа®Ја ¬¬Ёа®ў ­Ёп ®ЎйҐЈ® ­ §­ зҐ­Ёп ў®®ЎйҐ,
в Є Ё ‘++ ў з бв­®бвЁ. ќвЁ ®Ја ­ЁзҐ­Ёп бўп§ ­л б нд䥪⨢­®бвмо, б
Їа®вЁў®аҐз йЁ¬Ё ¤агЈ ¤агЈг вॡ®ў ­Ёп¬Ё а §­ле ®Ў« б⥩ ЇаЁ«®¦Ґ­Ёп,
Їа®Ў«Ґ¬ ¬Ё ®Ўг祭Ёп Ё ­Ґ®Ўе®¤Ё¬®бвмо ва ­б«пжЁЁ Ё ўлЇ®«­Ґ­Ёп Їа®Ја ¬¬ ў
бв але бЁб⥬ е.

…б«Ё Є Є®©-в® а §¤Ґ« ®Є ¦Ґвбп ¤«п ў б ­ҐЇ®­пв­л¬, ­ бв®п⥫쭮
б®ўҐв㥬 Їа®зЁв вм ᮮ⢥вбвўгойЁҐ Ј« ўл,   § вҐ¬, ®§­ Є®¬ЁўиЁбм б
Ї®¤а®Ў­л¬ ®ЇЁб ­ЁҐ¬ ®б­®ў­ле Є®­бвагЄжЁ© п§лЄ , ўҐа­гвмбп Є нв®© Ј« ўҐ.
Ћ­  ­г¦­  ¤«п в®Ј®, зв®Ўл ¬®¦­® Ўл«® б®бв ўЁвм ®ЎйҐҐ ЇаҐ¤бв ў«Ґ­ЁҐ ®
п§лЄҐ. ‚ ­Ґ© ­Ґ¤®бв в®з­® ᢥ¤Ґ­Ё©, зв®Ўл ­Ґ¬Ґ¤«Ґ­­® ­ з вм
Їа®Ја ¬¬Ёа®ў вм.


1.2 Џ а ¤ЁЈ¬л Їа®Ја ¬¬Ёа®ў ­Ёп

ЋЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ - нв® ¬Ґв®¤
Їа®Ја ¬¬Ёа®ў ­Ёп, бЇ®б®Ў ­ ЇЁб ­Ёп "е®а®иЁе" Їа®Ја ¬¬ ¤«п ¬­®¦Ґбвў  § ¤ з.
…б«Ё нв®в вҐа¬Ё­ Ё¬ҐҐв Є Є®©-в® б¬лб«, в® ®­ ¤®«¦Ґ­ Ї®¤а §г¬Ґў вм: в Є®©
п§лЄ Їа®Ја ¬¬Ёа®ў ­Ёп, Є®в®ал© ЇаҐ¤®бв ў«пҐв е®а®иЁҐ ў®§¬®¦­®бвЁ ¤«п
®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј® бвЁ«п Їа®Ја ¬¬Ёа®ў ­Ёп.

‡¤Ґбм б«Ґ¤гҐв гЄ § вм ­  ў ¦­лҐ а §«ЁзЁп. ѓ®ў®апв, зв® п§лЄ
Ї®¤¤Ґа¦Ёў Ґв ­ҐЄ®в®ал© бвЁ«м Їа®Ја ¬¬Ёа®ў ­Ёп, Ґб«Ё ў ­Ґ¬ Ґбвм в ЄЁҐ
ў®§¬®¦­®бвЁ, Є®в®алҐ ¤Ґ« ов Їа®Ја ¬¬Ёа®ў ­ЁҐ ў н⮬ бвЁ«Ґ 㤮Ў­л¬
(¤®бв в®з­® Їа®бвл¬, ­ ¤Ґ¦­л¬ Ё нд䥪⨢­л¬). џ§лЄ ­Ґ Ї®¤¤Ґа¦Ёў Ґв
­ҐЄ®в®ал© бвЁ«м Їа®Ја ¬¬Ёа®ў ­Ёп, Ґб«Ё вॡговбп Ў®«миЁҐ гбЁ«Ёп Ё«Ё ¤ ¦Ґ
ЁбЄгббвў®, зв®Ўл ­ ЇЁб вм Їа®Ја ¬¬г ў н⮬ бвЁ«Ґ. Ћ¤­ Є® нв® ­Ґ ®§­ з Ґв,
зв® п§лЄ § ЇаҐй Ґв ЇЁб вм Їа®Ја ¬¬л ў н⮬ бвЁ«Ґ. „Ґ©б⢨⥫쭮, ¬®¦­®
ЇЁб вм бвагЄвга­лҐ Їа®Ја ¬¬л ­  ”®ава ­Ґ Ё ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­лҐ
Їа®Ја ¬¬л ­  ‘, ­® нв® Ўг¤Ґв Їгбв®© ва в®© бЁ«, Ї®бЄ®«мЄг ¤ ­­лҐ п§лЄЁ ­Ґ
Ї®¤¤Ґа¦Ёў ов гЄ § ­­ле бвЁ«Ґ© Їа®Ја ¬¬Ёа®ў ­Ёп.

Џ®¤¤Ґа¦Є  п§лЄ®¬ ®ЇаҐ¤Ґ«Ґ­­®© Ї а ¤ЁЈ¬л (бвЁ«п) Їа®Ја ¬¬Ёа®ў ­Ёп пў­®
Їа®пў«пҐвбп ў Є®­ЄаҐв­ле п§лЄ®ўле Є®­бвагЄжЁпе, а ббзЁв ­­ле ­  ­ҐҐ. Ќ®
®­  ¬®¦Ґв Їа®пў«пвмбп ў Ў®«ҐҐ в®­Є®©, бЄалв®© д®а¬Ґ, Є®Ј¤  ®вЄ«®­Ґ­ЁҐ ®в
Ї а ¤ЁЈ¬л ¤Ё Ј­®бвЁагҐвбп ­  бв ¤ЁЁ ва ­б«пжЁЁ Ё«Ё ўлЇ®«­Ґ­Ёп Їа®Ја ¬¬л.
‘ ¬л© ®зҐўЁ¤­л© ЇаЁ¬Ґа - нв® Є®­ва®«м вЁЇ®ў. Ља®¬Ґ в®Ј®, п§лЄ®ў п
Ї®¤¤Ґа¦Є  Ї а ¤ЁЈ¬л ¬®¦Ґв ¤®Ї®«­пвмбп Їа®ўҐаЄ®© ­  ®¤­®§­ з­®бвм Ё
¤Ё­ ¬ЁзҐбЄЁ¬ Є®­ва®«Ґ¬. Џ®¤¤Ґа¦Є  ¬®¦Ґв ЇаҐ¤®бв ў«пвмбп Ё Ї®¬Ё¬® б ¬®Ј®
п§лЄ , ­ ЇаЁ¬Ґа, бв ­¤ ав­л¬Ё ЎЁЎ«Ё®вҐЄ ¬Ё Ё«Ё б।®© Їа®Ја ¬¬Ёа®ў ­Ёп.

ЌҐ«м§п бЄ § вм, зв® ®¤Ё­ п§лЄ «гзиҐ ¤агЈ®Ј® в®«мЄ® Ї®в®¬г, зв® ў ­Ґ¬
Ґбвм ў®§¬®¦­®бвЁ, Є®в®алҐ ў ¤агЈ®¬ ®вбгвбвўгов. — бв® Ўлў Ґв Є Є а §
­ ®Ў®а®в. ‡¤Ґбм Ў®«ҐҐ ў ¦­® ­Ґ в®, Є ЄЁ¬Ё ў®§¬®¦­®бвп¬Ё ®Ў« ¤ Ґв п§лЄ,  
в®, ­ бЄ®«мЄ® Ё¬ҐойЁҐбп ў ­Ґ¬ ў®§¬®¦­®бвЁ Ї®¤¤Ґа¦Ёў ов Ё§Ўа ­­л© бвЁ«м
Їа®Ја ¬¬Ёа®ў ­Ёп ¤«п ®ЇаҐ¤Ґ«Ґ­­®Ј® ЄагЈ  § ¤ з. Џ®н⮬㠬®¦­®
бд®а¬г«Ёа®ў вм б«Ґ¤гойЁҐ вॡ®ў ­Ёп Є п§лЄг:

[1] ‚ᥠЄ®­бвагЄжЁЁ п§лЄ  ¤®«¦­л ҐбвҐб⢥­­® Ё н«ҐЈ ­в­® ®ЇаҐ¤Ґ«пвмбп
ў ­Ґ¬.

[2] „«п аҐиҐ­Ёп ®ЇаҐ¤Ґ«Ґ­­®© § ¤ зЁ ¤®«¦­  Ўлвм ў®§¬®¦­®бвм
ЁбЇ®«м§®ў вм б®зҐв ­Ёп Є®­бвагЄжЁ©, зв®Ўл Ё§ЎҐ¦ вм ­Ґ®Ўе®¤Ё¬®бвЁ ўў®¤Ёвм
¤«п нв®© 楫Ё ­®ўго Є®­бвагЄжЁо.

[3] „®«¦­® Ўлвм ¬Ё­Ё¬ «м­®Ґ зЁб«® ­Ґ®зҐўЁ¤­ле Є®­бвагЄжЁ© бЇҐжЁ «м­®Ј®
­ §­ зҐ­Ёп.

[4] Љ®­бвагЄжЁп ¤®«¦­  ¤®ЇгбЄ вм в Єго ॠ«Ё§ жЁо, зв®Ўл ў
­ҐЁбЇ®«м§го饩 ҐҐ Їа®Ја ¬¬Ґ ­Ґ ў®§­ЁЄ«® ¤®Ї®«­ЁвҐ«м­ле а б室®ў.

[5] Џ®«м§®ў вҐ«о ¤®бв в®з­® §­ вм в®«мЄ® в® ¬­®¦Ґбвў® Є®­бвагЄжЁ©,
Є®в®а®Ґ ­ҐЇ®б।б⢥­­® ЁбЇ®«м§гҐвбп ў ҐЈ® Їа®Ја ¬¬Ґ.

ЏҐаў®Ґ вॡ®ў ­ЁҐ  ЇҐ««ЁагҐв Є «®ЈЁЄҐ Ё нбвҐвЁзҐбЄ®¬г ўЄгбг. „ў 
б«Ґ¤гойЁе ўла ¦ ов ЇаЁ­жЁЇ ¬Ё­Ё¬ «м­®бвЁ. „ў  Ї®б«Ґ¤­Ёе ¬®¦­® Ё­ зҐ
бд®а¬г«Ёа®ў вм в Є: "в®, 祣® ўл ­Ґ §­ ҐвҐ, ­Ґ ᬮ¦Ґв ­ ­ҐбвЁ ў ¬ ўаҐ¤ ".

‘ гзҐв®¬ ®Ја ­ЁзҐ­Ё©, гЄ § ­­ле ў нвЁе Їа ўЁ« е, п§лЄ ‘++
Їа®ҐЄвЁа®ў «бп ¤«п Ї®¤¤Ґа¦ЄЁ  Ўбва ЄжЁЁ ¤ ­­ле Ё ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј®
Їа®Ја ¬¬Ёа®ў ­Ёп ў ¤®Ў ў«Ґ­ЁҐ Є ва ¤ЁжЁ®­­®¬г бвЁ«о ‘. ‚Їа®зҐ¬, нв® ­Ґ
§­ зЁв, зв® п§лЄ вॡгҐв Є Є®Ј®-в® ®¤­®Ј® бвЁ«п Їа®Ја ¬¬Ёа®ў ­Ёп ®в ўбҐе
Ї®«м§®ў вҐ«Ґ©.

’ҐЇҐам ЇҐаҐ©¤Ґ¬ Є Є®­ЄаҐв­л¬ бвЁ«п¬ Їа®Ја ¬¬Ёа®ў ­Ёп Ё Ї®б¬®ваЁ¬
Є Є®ўл ®б­®ў­лҐ Є®­бвагЄжЁЁ п§лЄ , Ёе Ї®¤¤Ґа¦Ёў ойЁҐ. Њл ­Ґ б®ЎЁа Ґ¬бп
¤ ў вм Ї®«­®Ґ ®ЇЁб ­ЁҐ нвЁе Є®­бвагЄжЁ©.


1.2.1 Џа®жҐ¤га­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ

ЏҐаў®­ з «м­®© (Ё, ў®§¬®¦­®, ­ ЁЎ®«ҐҐ ЁбЇ®«м§гҐ¬®©) Ї а ¤ЁЈ¬®©
Їа®Ја ¬¬Ёа®ў ­Ёп Ўл«®:

ЋЇаҐ¤Ґ«ЁвҐ, Є ЄЁҐ Їа®жҐ¤гал ў ¬ ­г¦­л; ЁбЇ®«м§г©вҐ «гзиЁҐ Ё§ Ё§ўҐбв­ле
ў ¬  «Ј®аЁв¬®ў!

“¤ аҐ­ЁҐ ¤Ґ« «®бм ­  ®Ўа Ў®вЄг ¤ ­­ле б Ї®¬®ймо  «Ј®аЁв¬ ,
Їа®Ё§ў®¤п饣® ­г¦­лҐ ўлзЁб«Ґ­Ёп. „«п Ї®¤¤Ґа¦ЄЁ нв®© Ї а ¤ЁЈ¬л п§лЄЁ
ЇаҐ¤®бв ў«п«Ё ¬Ґе ­Ё§¬ ЇҐаҐ¤ зЁ Ї а ¬Ґва®ў Ё Ї®«г祭Ёп १г«мв в®ў
дг­ЄжЁ©. ‹ЁвҐа вга , ®ва ¦ ой п в Є®© Ї®¤е®¤, § Ї®«­Ґ­  а бб㦤Ґ­Ёп¬Ё ®
бЇ®б®Ў е ЇҐаҐ¤ зЁ Ї а ¬Ґва®ў, ® ⮬, Є Є а §«Ёз вм Ї а ¬Ґвал а §­ле вЁЇ®ў,
® а §«Ёз­ле ўЁ¤ е дг­ЄжЁ© (Їа®жҐ¤гал, Ї®¤Їа®Ја ¬¬л, ¬ Єа®Є®¬ ­¤л, ...) Ё
в.¤. ЏҐаўл¬ Їа®жҐ¤га­л¬ п§лЄ®¬ Ўл« ”®ава ­,   Ђ«Ј®«60, Ђ«Ј®«68, Џ бЄ «м Ё
‘ Їа®¤®«¦Ё«Ё нв® ­ Їа ў«Ґ­ЁҐ.

’ЁЇЁз­л¬ ЇаЁ¬Ґа®¬ е®а®иҐЈ® бвЁ«п ў в Є®¬ Ї®­Ё¬ ­ЁЁ ¬®¦Ґв б«г¦Ёвм
дг­ЄжЁп Ё§ў«ҐзҐ­Ёп Єў ¤а в­®Ј® Є®а­п. „«п § ¤ ­­®Ј® Ї а ¬Ґва  ®­  ўл¤ Ґв
१г«мв в, Є®в®ал© Ї®«гз Ґвбп б Ї®¬®ймо Ї®­пв­ле ¬ вҐ¬ вЁзҐбЄЁе ®ЇҐа жЁ©:

double sqrt ( double arg )
{
// Їа®Ја ¬¬  ¤«п ўлзЁб«Ґ­Ёп Єў ¤а в­®Ј® Є®а­п
}

voide some_function ()
{
double root = sqrt ( 2 );
// ..
}

„ў®©­ п ­ Є«®­­ п зҐав  // ­ зЁ­ Ґв Є®¬¬Ґ­в аЁ©, Є®в®ал© Їа®¤®«¦ Ґвбп
¤® Є®­ж  бва®ЄЁ.

ЏаЁ в Є®© ®аЈ ­Ё§ жЁЁ Їа®Ја ¬¬л дг­ЄжЁЁ ў­®бпв ®ЇаҐ¤Ґ«Ґ­­л© Ї®а冷Є ў
е ®б а §«Ёз­ле  «Ј®аЁв¬®ў.


1.2.2 Њ®¤г«м­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ

‘® ўаҐ¬Ґ­Ґ¬ ЇаЁ ў Їа®ҐЄвЁа®ў ­ЁЁ Їа®Ја ¬¬  ЄжҐ­в ᬥбвЁ«бп б
®аЈ ­Ё§ жЁЁ Їа®жҐ¤га ­  ®аЈ ­Ё§ жЁо бвагЄвга ¤ ­­ле. Џ®¬Ё¬® ўбҐЈ® Їа®зҐЈ®
нв® ўл§ў ­® Ё а®б⮬ а §¬Ґа®ў Їа®Ја ¬¬. Њ®¤г«Ґ¬ ®Ўлз­® ­ §лў ов
б®ў®ЄгЇ­®бвм бўп§ ­­ле Їа®жҐ¤га Ё вҐе ¤ ­­ле, Є®в®ал¬Ё ®­Ё гЇа ў«пов.
Џ а ¤ЁЈ¬  Їа®Ја ¬¬Ёа®ў ­Ёп ЇаЁ®ЎаҐ«  ўЁ¤:

ЋЇаҐ¤Ґ«ЁвҐ, Є ЄЁҐ ¬®¤г«Ё ­г¦­л; Ї®¤Ґ«ЁвҐ Їа®Ја ¬¬г в Є, зв®Ўл ¤ ­­лҐ
Ўл«Ё бЄалвл ў нвЁе ¬®¤г«пе

ќв  Ї а ¤ЁЈ¬  Ё§ўҐбв­  в Є¦Ґ Є Є "ЇаЁ­жЁЇ б®ЄалвЁп ¤ ­­ле". …б«Ё ў
п§лЄҐ ­Ґв ў®§¬®¦­®бвЁ бЈагЇЇЁа®ў вм бўп§ ­­лҐ Їа®жҐ¤гал ў¬ҐбвҐ б ¤ ­­л¬Ё,
в® ®­ Ї«®е® Ї®¤¤Ґа¦Ёў Ґв ¬®¤г«м­л© бвЁ«м Їа®Ја ¬¬Ёа®ў ­Ёп. ’ҐЇҐам ¬Ґв®¤
­ ЇЁб ­Ёп "е®а®иЁе" Їа®жҐ¤га ЇаЁ¬Ґ­пҐвбп ¤«п ®в¤Ґ«м­ле Їа®жҐ¤га ¬®¤г«п.
’ЁЇЁз­л© ЇаЁ¬Ґа ¬®¤г«п - ®ЇаҐ¤Ґ«Ґ­ЁҐ б⥪ . ‡¤Ґбм ­Ґ®Ўе®¤Ё¬® аҐиЁвм в ЄЁҐ
§ ¤ зЁ:

[1] ЏаҐ¤®бв ўЁвм Ї®«м§®ў вҐ«о Ё­вҐадҐ©б ¤«п б⥪  (­ ЇаЁ¬Ґа, дг­ЄжЁЁ
push () Ё pop ()).

[2] ѓ а ­вЁа®ў вм, зв® ЇаҐ¤бв ў«Ґ­ЁҐ б⥪  (­ ЇаЁ¬Ґа, ў ўЁ¤Ґ ¬ ббЁў 
н«Ґ¬Ґ­в®ў) Ўг¤Ґв ¤®бвгЇ­® «Ёим зҐаҐ§ Ё­вҐадҐ©б Ї®«м§®ў вҐ«п.

[3] ЋЎҐбЇҐзЁў вм Ё­ЁжЁ «Ё§ жЁо б⥪  ЇҐаҐ¤ ЇҐаўл¬ ҐЈ® ЁбЇ®«м§®ў ­ЁҐ¬.

џ§лЄ Њ®¤г« -2 Їаאַ Ї®¤¤Ґа¦Ёў Ґв нвг Ї а ¤ЁЈ¬г, в®Ј¤  Є Є ‘ в®«мЄ®
¤®ЇгбЄ Ґв в Є®© бвЁ«м. ЌЁ¦Ґ ЇаҐ¤бв ў«Ґ­ ­  ‘ ў®§¬®¦­л© ў­Ґи­Ё© Ё­вҐа䥩б
¬®¤г«п, ॠ«Ё§го饣® б⥪:


// ®ЇЁб ­ЁҐ Ё­вҐадҐ©б  ¤«п ¬®¤г«п,
// ॠ«Ё§го饣® б⥪ бЁ¬ў®«®ў:

void push ( char );
char pop ();
const int stack_size = 100;

„®ЇгбвЁ¬, зв® ®ЇЁб ­ЁҐ Ё­вҐадҐ©б  ­ е®¤Ёвбп ў д ©«Ґ stack.h, в®Ј¤ 
ॠ«Ё§ жЁо б⥪  ¬®¦­® ®ЇаҐ¤Ґ«Ёвм б«Ґ¤гойЁ¬ ®Ўа §®¬:

#include "stack.h" // ЁбЇ®«м§гҐ¬ Ё­вҐа䥩б б⥪ 

static char v [ stack_size ]; // ``static'' ®§­ з Ґв «®Є «м­л©
// ў ¤ ­­®¬ д ©«Ґ/¬®¤г«Ґ
static char * p = v; // б⥪ ў­ з «Ґ Їгбв

void push ( char c )
{
//Їа®ўҐаЁвм ­  ЇҐаҐЇ®«­Ґ­ЁҐ Ё Ї®¬ҐбвЁвм ў б⥪
}

char pop ()
{
//Їа®ўҐаЁвм, ­Ґ Їгбв «Ё б⥪, Ё бзЁв вм Ё§ ­ҐЈ®
}

‚Ї®«­Ґ ў®§¬®¦­®, з⮠ॠ«Ё§ жЁп б⥪  ¬®¦Ґв Ё§¬Ґ­Ёвмбп, ­ ЇаЁ¬Ґа, Ґб«Ё
ЁбЇ®«м§®ў вм ¤«п еа ­Ґ­Ёп бўп§ ­­л© бЇЁб®Є. Џ®«м§®ў вҐ«м ў «оЎ®¬ б«гз Ґ ­Ґ
Ё¬ҐҐв ­ҐЇ®б।б⢥­­®Ј® ¤®бвгЇ  Є ॠ«Ё§ жЁЁ: v Ё p - бв вЁзҐбЄЁҐ
ЇҐаҐ¬Ґ­­лҐ, в.Ґ. ЇҐаҐ¬Ґ­­лҐ «®Є «м­лҐ ў ⮬ ¬®¤г«Ґ (д ©«Ґ), ў Є®в®а®¬ ®­Ё
®ЇЁб ­л. €бЇ®«м§®ў вм б⥪ ¬®¦­® в Є:

#include "stack.h" // ЁбЇ®«м§гҐ¬ Ё­вҐа䥩б б⥪ 

void some_function ()
{
push ( 'c' );
char c = pop ();
if ( c != 'c' ) error ( "­Ґў®§¬®¦­®" );
}

Џ®бЄ®«мЄг ¤ ­­лҐ Ґбвм Ґ¤Ё­б⢥­­ п ўҐйм, Є®в®аго е®впв бЄалў вм,
Ї®­пвЁҐ гЇапвлў ­Ёп ¤ ­­ле ваЁўЁ «м­® а биЁапҐвбп ¤® Ї®­пвЁп гЇапвлў ­Ёп
Ё­д®а¬ жЁЁ, в.Ґ. Ё¬Ґ­ ЇҐаҐ¬Ґ­­ле, Є®­бв ­в, дг­ЄжЁ© Ё вЁЇ®ў, Є®в®алҐ в®¦Ґ
¬®Јгв Ўлвм «®Є «м­л¬Ё ў ¬®¤г«Ґ. •®вп ‘++ Ё ­Ґ ЇаҐ¤­ §­ з «бп бЇҐжЁ «м­®
¤«п Ї®¤¤Ґа¦ЄЁ ¬®¤г«м­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп, Є« ббл Ї®¤¤Ґа¦Ёў ов Є®­жҐЇжЁо
¬®¤г«м­®бвЁ ($$5.4.3 Ё $$5.4.4). Џ®¬Ё¬® нв®Ј® ‘++, ҐбвҐб⢥­­®, Ё¬ҐҐв 㦥
Їа®¤Ґ¬®­бваЁа®ў ­­лҐ ў®§¬®¦­®бвЁ ¬®¤г«м­®бвЁ, Є®в®алҐ Ґбвм ў ‘, в.Ґ.
ЇаҐ¤бв ў«Ґ­ЁҐ ¬®¤г«п Є Є ®в¤Ґ«м­®© Ґ¤Ё­Ёжл ва ­б«пжЁЁ.


1.2.3 ЂЎбва ЄжЁп ¤ ­­ле

Њ®¤г«м­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ ЇаҐ¤Ї®« Ј Ґв ЈагЇЇЁа®ўЄг ўбҐе ¤ ­­ле ®¤­®Ј®
вЁЇ  ў®ЄагЈ ®¤­®Ј® ¬®¤г«п, гЇа ў«по饣® нвЁ¬ вЁЇ®¬. …б«Ё Ї®вॡговбп б⥪Ё
¤ўге а §­ле ўЁ¤®ў, ¬®¦­® ®ЇаҐ¤Ґ«Ёвм гЇа ў«пойЁ© Ё¬Ё ¬®¤г«м б в ЄЁ¬
Ё­вҐа䥩ᮬ:


class stack_id { /* ... */ }; // stack_id в®«мЄ® вЁЇ
// ­ЁЄ Є®© Ё­д®а¬ жЁЁ ® б⥪ е
// §¤Ґбм ­Ґ ᮤҐа¦Ёвбп

stack_id create_stack ( int size ); // ᮧ¤ вм б⥪ Ё ў®§ўа вЁвм
// ҐЈ® Ё¤Ґ­вЁдЁЄ в®а

void push ( stack_id, char );
char pop ( stack_id );

destroy_stack ( stack_id ); // г­Ёз⮦Ґ­ЁҐ б⥪ 

Љ®­Ґз­® в Є®Ґ аҐиҐ­ЁҐ ­ ¬­®Ј® «гзиҐ, 祬 е ®б, бў®©б⢥­­л©
ва ¤ЁжЁ®­­л¬, ­ҐбвагЄвгаЁа®ў ­­л¬ аҐиҐ­Ёп¬, ­® ¬®¤Ґ«ЁагҐ¬лҐ в ЄЁ¬ бЇ®б®Ў®¬
вЁЇл б®ўҐа襭­® ®зҐўЁ¤­® ®в«Ёз овбп ®в "­ бв®пйЁе", ўбв஥­­ле. Љ ¦¤л©
гЇа ў«пойЁ© вЁЇ®¬ ¬®¤г«м ¤®«¦Ґ­ ®ЇаҐ¤Ґ«пвм бў®© б®Ўб⢥­­л©  «Ј®аЁв¬
ᮧ¤ ­Ёп "ЇҐаҐ¬Ґ­­ле" нв®Ј® вЁЇ . ЌҐ бгйҐбвўгҐв г­ЁўҐаб «м­ле Їа ўЁ«
ЇаЁбў Ёў ­Ёп Ё¤Ґ­вЁдЁЄ в®а®ў, ®Ў®§­ з ойЁе ®ЎкҐЄвл в Є®Ј® вЁЇ . “
"ЇҐаҐ¬Ґ­­ле" в ЄЁе вЁЇ®ў ­Ґ бгйҐбвўгҐв Ё¬Ґ­, Є®в®алҐ Ўл«Ё Ўл Ё§ўҐбв­л
ва ­б«пв®аг Ё«Ё ¤агЈЁ¬ бЁб⥬­л¬ Їа®Ја ¬¬ ¬, Ё нвЁ "ЇҐаҐ¬Ґ­­лҐ" ­Ґ
Ї®¤зЁ­повбп ®Ўлз­л¬ Їа ўЁ« ¬ ®Ў« б⥩ ўЁ¤Ё¬®бвЁ Ё ЇҐаҐ¤ зЁ Ї а ¬Ґва®ў.

’ЁЇ, ॠ«Ё§гҐ¬л© гЇа ў«пойЁ¬ Ё¬ ¬®¤г«Ґ¬, Ї® ¬­®ЈЁ¬ ў ¦­л¬  бЇҐЄв ¬
бгйҐб⢥­­® ®в«Ёз Ґвбп ®в ўбв஥­­ле вЁЇ®ў. ’ ЄЁҐ вЁЇл ­Ґ Ї®«гз ов в®©
Ї®¤¤Ґа¦ЄЁ б® бв®а®­л ва ­б«пв®а  (а §­®Ј® ўЁ¤  Є®­ва®«м), Є®в®а п
®ЎҐбЇҐзЁў Ґвбп ¤«п ўбв஥­­ле вЁЇ®ў. Џа®Ў«Ґ¬  §¤Ґбм ў ⮬, зв® Їа®Ја ¬¬ 
д®а¬г«ЁагҐвбп ў вҐа¬Ё­ е ­ҐЎ®«миЁе (®¤­®-¤ў  б«®ў ) ¤ҐбЄаЁЇв®а®ў ®ЎкҐЄв®ў,
  ­Ґ ў вҐа¬Ё­ е б ¬Ёе ®ЎкҐЄв®ў ( stack_id ¬®¦Ґв б«г¦Ёвм ЇаЁ¬Ґа®¬ в Є®Ј®
¤ҐбЄаЁЇв®а ). ќв® ®§­ з Ґв, зв® ва ­б«пв®а ­Ґ ᬮ¦Ґв ®в«®ўЁвм Ј«гЇлҐ,
®зҐўЁ¤­лҐ ®иЁЎЄЁ, ўа®¤Ґ вҐе, зв® ¤®ЇгйҐ­л ў ЇаЁўҐ¤Ґ­­®© ­Ё¦Ґ дг­ЄжЁЁ:

void f ()
{
stack_id s1;
stack_id s2;

s1 = create_stack ( 200 );
// ®иЁЎЄ : § Ўл«Ё ᮧ¤ вм s2

push ( s1,'a' );
char c1 = pop ( s1 );

destroy_stack ( s2 ); // ­ҐЇаЁпв­ п ®иЁЎЄ 

// ®иЁЎЄ : § Ўл«Ё г­Ёз⮦Ёвм s1

s1 = s2; // нв® ЇаЁбў Ёў ­ЁҐ пў«пҐвбп Ї® бгвЁ
// ЇаЁбў Ёў ­ЁҐ¬ гЄ § вҐ«Ґ©,
// ­® §¤Ґбм s2 ЁбЇ®«м§гҐвбп Ї®б«Ґ г­Ёз⮦Ґ­Ёп
}

€­л¬Ё б«®ў ¬Ё, Є®­жҐЇжЁп ¬®¤г«м­®бвЁ, Ї®¤¤Ґа¦Ёў ой п Ї а ¤ЁЈ¬г
гЇапвлў ­Ёп ¤ ­­ле, ­Ґ § ЇаҐй Ґв в Є®© бвЁ«м Їа®Ја ¬¬Ёа®ў ­Ёп, ­® Ё ­Ґ
бЇ®б®ЎбвўгҐв Ґ¬г.

‚ п§лЄ е Ђ¤ , Clu, ‘++ Ё Ї®¤®Ў­ле Ё¬ нв  ваг¤­®бвм ЇаҐ®¤®«Ґў Ґвбп
Ў« Ј®¤ ап ⮬г, зв® Ї®«м§®ў вҐ«о а §аҐи Ґвбп ®ЇаҐ¤Ґ«пвм бў®Ё вЁЇл, Є®в®алҐ
ва Євговбп ў п§лЄҐ Їа ЄвЁзҐбЄЁ в Є ¦Ґ, Є Є ўбв஥­­лҐ. ’ ЄЁҐ вЁЇл ®Ўлз­®
­ §лў ов  Ўбва Єв­л¬Ё вЁЇ ¬Ё ¤ ­­ле, е®вп «гзиҐ, Ї®¦ «г©, Ёе ­ §лў вм
Їа®бв® Ї®«м§®ў вҐ«мбЄЁ¬Ё. Ѓ®«ҐҐ бва®ЈЁ¬ ®ЇаҐ¤Ґ«Ґ­ЁҐ¬  Ўбва Єв­ле вЁЇ®ў
¤ ­­ле Ўл«® Ўл Ёе ¬ вҐ¬ вЁзҐбЄ®Ґ ®ЇаҐ¤Ґ«Ґ­ЁҐ. …б«Ё Ўл г¤ «®бм ҐЈ® ¤ вм,
в®, зв® ¬л ­ §лў Ґ¬ ў Їа®Ја ¬¬Ёа®ў ­ЁЁ вЁЇ ¬Ё, Ўл«® Ўл Є®­ЄаҐв­л¬
ЇаҐ¤бв ў«Ґ­ЁҐ¬ ¤Ґ©б⢨⥫쭮  Ўбва Єв­ле бгй­®б⥩. Љ Є ®ЇаҐ¤Ґ«Ёвм "Ў®«ҐҐ
 Ўбва Єв­лҐ" вЁЇл, Ї®Є § ­® ў $$4.6. Џ а ¤ЁЈ¬г ¦Ґ Їа®Ја ¬¬Ёа®ў ­Ёп ¬®¦­®
ўла §Ёвм ⥯Ґам в Є:

ЋЇаҐ¤Ґ«ЁвҐ, Є ЄЁҐ вЁЇл ў ¬ ­г¦­л; ЇаҐ¤®бв ўм⥠Ї®«­л© ­ Ў®а ®ЇҐа жЁ©
¤«п Є ¦¤®Ј® вЁЇ .

…б«Ё ­Ґв ­Ґ®Ўе®¤Ё¬®бвЁ ў а §­ле ®ЎкҐЄв е ®¤­®Ј® вЁЇ , в® бвЁ«м
Їа®Ја ¬¬Ёа®ў ­Ёп, бгвм Є®в®а®Ј® бў®¤Ёвбп Є гЇапвлў ­Ёо ¤ ­­ле, Ё
б«Ґ¤®ў ­ЁҐ Є®в®а®¬г ®ЎҐбЇҐзЁў Ґвбп б Ї®¬®ймо Є®­жҐЇжЁЁ ¬®¤г«м­®бвЁ, ўЇ®«­Ґ
 ¤ҐЄў вҐ­ нв®© Ї а ¤ЁЈ¬Ґ.

ЂаЁд¬ҐвЁзҐбЄЁҐ вЁЇл, Ї®¤®Ў­лҐ вЁЇ ¬ а жЁ®­ «м­ле Ё Є®¬Ї«ҐЄб­ле зЁбҐ«,
пў«повбп вЁЇЁз­л¬Ё ЇаЁ¬Ґа ¬Ё Ї®«м§®ў вҐ«мбЄЁе вЁЇ®ў:

class complex
{
double re, im;
public:
complex(double r, double i) { re=r; im=i; }
complex(double r) // ЇаҐ®Ўа §®ў ­ЁҐ float->complex
{ re=r; im=0; }
friend complex operator+(complex, complex);
friend complex operator-(complex, complex); // ўлзЁв ­ЁҐ
friend complex operator-(complex) // г­ а­л© ¬Ё­гб
friend complex operator*(complex, complex);
friend complex operator/(complex, complex);
// ...
};

ЋЇЁб ­ЁҐ Є« бб  (в.Ґ. ®ЇаҐ¤Ґ«пҐ¬®Ј® Ї®«м§®ў вҐ«Ґ¬ вЁЇ ) complex § ¤ Ґв
ЇаҐ¤бв ў«Ґ­ЁҐ Є®¬Ї«ҐЄб­®Ј® зЁб«  Ё ­ Ў®а ®ЇҐа жЁ© б Є®¬Ї«ҐЄб­л¬Ё зЁб« ¬Ё.
ЏаҐ¤бв ў«Ґ­ЁҐ пў«пҐвбп з бв­л¬ (private): re Ё im ¤®бвгЇ­л в®«мЄ® ¤«п
дг­ЄжЁ©, гЄ § ­­ле ў ®ЇЁб ­ЁЁ Є« бб  complex. Џ®¤®Ў­лҐ дг­ЄжЁЁ ¬®Јгв Ўлвм
®ЇаҐ¤Ґ«Ґ­л в Є:

complex operator + ( complex a1, complex a2 )
{
return complex ( a1.re + a2.re, a1.im + a2.im );
}

Ё ЁбЇ®«м§®ў вмбп б«Ґ¤гойЁ¬ ®Ўа §®¬:

void f ()
{
complex a = 2.3;
complex b = 1 / a;
complex c = a + b * complex ( 1, 2.3 );
// ...
c = - ( a / b ) + 2;
}

Ѓ®«миЁ­бвў® ¬®¤г«Ґ© (е®вп Ё ­Ґ ўбҐ) «гзиҐ ®ЇаҐ¤Ґ«пвм Є Є
Ї®«м§®ў вҐ«мбЄЁҐ вЁЇл.


1.2.4 ЏаҐ¤Ґ«л  Ўбва ЄжЁЁ ¤ ­­ле

ЂЎбва Єв­л© вЁЇ ¤ ­­ле ®ЇаҐ¤Ґ«пҐвбп Є Є ­ҐЄЁ© "зҐа­л© пйЁЄ". Џ®б«Ґ
бў®ҐЈ® ®ЇаҐ¤Ґ«Ґ­Ёп ®­ Ї® бгвЁ ­ЁЄ Є ­Ґ ў§ Ё¬®¤Ґ©бвўгҐв б Їа®Ја ¬¬®©. …Ј®
­ЁЄ Є ­Ґ«м§п ЇаЁбЇ®б®ЎЁвм ¤«п ­®ўле 楫Ґ©, ­Ґ ¬Ґ­пп ®ЇаҐ¤Ґ«Ґ­Ёп. ‚ н⮬
б¬лб«Ґ нв® ­ҐЈЁЎЄ®Ґ аҐиҐ­ЁҐ. Џгбвм, ­ ЇаЁ¬Ґа, ­г¦­® ®ЇаҐ¤Ґ«Ёвм ¤«п
Ја дЁзҐбЄ®© бЁб⥬л вЁЇ shape (дЁЈга ). Џ®Є  бзЁв Ґ¬, зв® ў бЁб⥬Ґ ¬®Јгв
Ўлвм в ЄЁҐ дЁЈгал: ®Єаг¦­®бвм (circle), ваҐгЈ®«м­ЁЄ (triangle) Ё Єў ¤а в
(square). Џгбвм 㦥 Ґбвм ®ЇаҐ¤Ґ«Ґ­Ёп в®зЄЁ Ё 梥в :

class point { /* ... */ };
class color { /* ... */ };

’ЁЇ shape ¬®¦­® ®ЇаҐ¤Ґ«Ёвм б«Ґ¤гойЁ¬ ®Ўа §®¬:

enum kind { circle, triangle, square };

class shape
{
point center;
color col;
kind k;
// ЇаҐ¤бв ў«Ґ­ЁҐ дЁЈгал
public:
point where () { return center; }
void move ( point to ) { center = to; draw (); }
void draw ();
void rotate ( int );
// ҐйҐ ­ҐЄ®в®алҐ ®ЇҐа жЁЁ
};

"Џ®«Ґ вЁЇ " k ­Ґ®Ўе®¤Ё¬® ¤«п в®Ј®, зв®Ўл в ЄЁҐ ®ЇҐа жЁЁ, Є Є draw () Ё
rotate (), ¬®Ј«Ё ®ЇаҐ¤Ґ«пвм, б Є Є®© дЁЈга®© ®­Ё Ё¬Ґов ¤Ґ«® (ў п§лЄ е
ўа®¤Ґ Џ бЄ «п ¬®¦­® ЁбЇ®«м§®ў вм ¤«п нв®Ј® § ЇЁбм б ў аЁ ­в ¬Ё, ў Є®в®а®©
k пў«пҐвбп Ї®«Ґ¬-¤ҐбЄаЁ¬Ё­ ­в®¬). ”г­ЄжЁо draw () ¬®¦­® ®ЇаҐ¤Ґ«Ёвм в Є:

void shape :: draw ()
{

switch ( k )
{
case circle:
// аЁб®ў ­ЁҐ ®Єаг¦­®бвЁ
break;
case triangle:
// аЁб®ў ­ЁҐ ваҐгЈ®«м­ЁЄ 
break;
case square:
// аЁб®ў ­ЁҐ Єў ¤а в 
break;
}
}

ќв® ­Ґ дг­ЄжЁп,   Є®и¬ а. ‚ ­Ґ© ­г¦­® гзҐбвм ўбҐ ў®§¬®¦­лҐ дЁЈгал,
Є ЄЁҐ в®«мЄ® Ґбвм. Џ®н⮬㠮­  ¤®Ї®«­пҐвбп ­®ўл¬Ё ®ЇҐа в®а ¬Ё, Є Є в®«мЄ®
ў бЁб⥬Ґ Ї®пў«пҐвбп ­®ў п дЁЈга . Џ«®е® в®, зв® Ї®б«Ґ ®ЇаҐ¤Ґ«Ґ­Ёп ­®ў®©
дЁЈгал ­г¦­® Їа®ўҐаЁвм Ё, ў®§¬®¦­®, Ё§¬Ґ­Ёвм ўбҐ бв алҐ ®ЇҐа жЁЁ Є« бб .
Џ®н⮬г, Ґб«Ё ў ¬ ­Ґ¤®бвгЇҐ­ Ёб室­л© ⥪бв Є ¦¤®© ®ЇҐа жЁЁ Є« бб , ўўҐбвЁ
­®ўго дЁЈгаг ў бЁб⥬㠯а®бв® ­Ґў®§¬®¦­®. Џ®пў«Ґ­ЁҐ «оЎ®© ­®ў®© дЁЈгал
ЇаЁў®¤Ёв Є ¬ ­ЁЇг«пжЁп¬ б ⥪б⮬ Є ¦¤®© бгйҐб⢥­­®© ®ЇҐа жЁЁ Є« бб .
’ॡгҐвбп ¤®бв в®з­® ўлб®Є п Єў «ЁдЁЄ жЁп, зв®Ўл бЇа ўЁвмбп б нв®©
§ ¤ зҐ©, ­® ўбҐ а ў­® ¬®Јгв Ї®пўЁвмбп ®иЁЎЄЁ ў 㦥 ®в« ¦Ґ­­ле з бвпе
Їа®Ја ¬¬л, а Ў®в ойЁе б® бв ал¬Ё дЁЈга ¬Ё. ‚®§¬®¦­®бвм ўлЎ®а 
ЇаҐ¤бв ў«Ґ­Ёп ¤«п Є®­ЄаҐв­®© дЁЈгал бЁ«м­® бг¦ Ґвбп, Ґб«Ё вॡ®ў вм, зв®Ўл
ўбҐ ҐҐ ЇаҐ¤бв ў«Ґ­Ёп гЄ« ¤лў «Ёбм ў 㦥 § ¤ ­­л© д®а¬ в, бЇҐжЁдЁжЁа®ў ­­л©
®ЎйЁ¬ ®ЇаҐ¤Ґ«Ґ­ЁҐ¬ дЁЈгал (в.Ґ. ®ЇаҐ¤Ґ«Ґ­ЁҐ¬ вЁЇ  shape).


1.2.5 ЋЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ

Џа®Ў«Ґ¬  б®бв®Ёв ў ⮬, зв® ¬л ­Ґ а §«Ёз Ґ¬ ®ЎйЁҐ бў®©бвў  дЁЈга
(­ ЇаЁ¬Ґа, дЁЈга  Ё¬ҐҐв 梥в, ҐҐ ¬®¦­® ­ аЁб®ў вм Ё в.¤.) Ё бў®©бвў 
Є®­ЄаҐв­®© дЁЈгал (­ ЇаЁ¬Ґа, ®Єаг¦­®бвм - нв® в Є п дЁЈга , Є®в®а п Ё¬ҐҐв
а ¤Ёгб, ®­  Ё§®Ўа ¦ Ґвбп б Ї®¬®ймо дг­ЄжЁЁ, аЁбго饩 ¤гЈЁ Ё в.¤.). ‘гвм
®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп ў ⮬, зв® ®­® Ї®§ў®«пҐв
ўла ¦ вм нвЁ а §«ЁзЁп Ё ЁбЇ®«м§гҐв Ёе. џ§лЄ, Є®в®ал© Ё¬ҐҐв Є®­бвагЄжЁЁ ¤«п
ўла ¦Ґ­Ёп Ё ЁбЇ®«м§®ў ­Ёп Ї®¤®Ў­ле а §«ЁзЁ©, Ї®¤¤Ґа¦Ёў Ґв
®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ. ‚ᥠ¤агЈЁҐ п§лЄЁ ­Ґ
Ї®¤¤Ґа¦Ёў ов ҐЈ®. ‡¤Ґбм ®б­®ў­го а®«м ЁЈа Ґв ¬Ґе ­Ё§¬ ­ б«Ґ¤®ў ­Ёп,
§ Ё¬бвў®ў ­­л© Ё§ п§лЄ  ‘Ё¬г« . ‚­ з «Ґ ®ЇаҐ¤Ґ«Ё¬ Є« бб, § ¤ ойЁ© ®ЎйЁҐ
бў®©бвў  ўбҐе дЁЈга:

class shape
{
point center;
color col;
// ...
public:
point where () { return center; }
void move ( point to ) { center = to; draw(); }
virtual void draw ();
virtual void rotate ( int );
// ...
};

’Ґ дг­ЄжЁЁ, ¤«п Є®в®але ¬®¦­® ®ЇаҐ¤Ґ«Ёвм § пў«Ґ­­л© Ё­вҐа䥩б, ­®
ॠ«Ё§ жЁп Є®в®але (в.Ґ. ⥫® б ®ЇҐа в®а­®© з бвмо) ў®§¬®¦­  в®«мЄ® ¤«п
Є®­ЄаҐв­ле дЁЈга, ®в¬ҐзҐ­л б«г¦ҐЎ­л¬ б«®ў®¬ virtual (ўЁавг «м­лҐ). ‚
‘Ё¬г«Ґ Ё ‘++ ўЁавг «м­®бвм дг­ЄжЁЁ ®§­ з Ґв: "дг­ЄжЁп ¬®¦Ґв Ўлвм
®ЇаҐ¤Ґ«Ґ­  Ї®§¤­ҐҐ ў Є« ббҐ, Їа®Ё§ў®¤­®¬ ®в ¤ ­­®Ј®". ‘ гзҐв®¬ в Є®Ј®
®ЇаҐ¤Ґ«Ґ­Ёп Є« бб  ¬®¦­® ­ ЇЁб вм ®ЎйЁҐ дг­ЄжЁЁ, а Ў®в ойЁҐ б дЁЈга ¬Ё:

void rotate_all ( shape v [], int size, int angle )
// Ї®ўҐа­гвм ўбҐ н«Ґ¬Ґ­вл ¬ ббЁў  "v" а §¬Ґа  "size"
// ­  гЈ®« а ў­л© "angle"
{
int i = 0;
while ( i<size )
{
v [ i ] . rotate ( angle );
i = i + 1;
}
}

„«п ®ЇаҐ¤Ґ«Ґ­Ёп Є®­ЄаҐв­®© дЁЈгал б«Ґ¤гҐв гЄ § вм, ЇаҐ¦¤Ґ ўбҐЈ®, зв®
нв® - Ё¬Ґ­­® дЁЈга  Ё § ¤ вм ҐҐ ®б®ЎлҐ бў®©бвў  (ўЄ«оз п Ё ўЁавг «м­лҐ
дг­ЄжЁЁ):

class circle : public shape
{
int radius;
public:
void draw () { /* ... */ };
void rotate ( int ) {} // ¤ , Ї®Є  Їгбв п дг­ЄжЁп
};

‚ п§лЄҐ ‘++ Є« бб circle ­ §лў Ґвбп Їа®Ё§ў®¤­л¬ Ї® ®в­®иҐ­Ёо Є Є« ббг
shape,   Є« бб shape ­ §лў Ґвбп Ў §®ўл¬ ¤«п Є« бб  circle. ‚®§¬®¦­ 
¤агЈ п вҐа¬Ё­®«®ЈЁп, ЁбЇ®«м§гой п ­ §ў ­Ёп "Ї®¤Є« бб" Ё "бгЇҐаЄ« бб" ¤«п
Є« бб®ў circle Ё shape ᮮ⢥вб⢥­­®. ’ҐЇҐам Ї а ¤ЁЈ¬  Їа®Ја ¬¬Ёа®ў ­Ёп
д®а¬г«ЁагҐвбп в Є:

ЋЇаҐ¤Ґ«ЁвҐ, Є Є®© Є« бб ў ¬ ­Ґ®Ўе®¤Ё¬; ЇаҐ¤®бв ўм⥠Ї®«­л© ­ Ў®а
®ЇҐа жЁ© ¤«п Є ¦¤®Ј® Є« бб ; ®Ўй­®бвм Є« бб®ў ўла §ЁвҐ пў­® б Ї®¬®ймо
­ б«Ґ¤®ў ­Ёп.

…б«Ё ®Ўй­®бвм ¬Ґ¦¤г Є« бб ¬Ё ®вбгвбвўгҐв, ўЇ®«­Ґ ¤®бв в®з­®  Ўбва ЄжЁЁ
¤ ­­ле. Ќ бЄ®«мЄ® ЇаЁ¬Ґ­Ё¬® ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ ¤«п
¤ ­­®© ®Ў« бвЁ ЇаЁ«®¦Ґ­Ёп ®ЇаҐ¤Ґ«пҐвбп б⥯Ґ­мо ®Ўй­®бвЁ ¬Ґ¦¤г а §­л¬Ё
вЁЇ ¬Ё, Є®в®а п Ї®§ў®«пҐв ЁбЇ®«м§®ў вм ­ б«Ґ¤®ў ­ЁҐ Ё ўЁавг «м­лҐ дг­ЄжЁЁ.
‚ ­ҐЄ®в®але ®Ў« бвпе, в ЄЁе, ­ ЇаЁ¬Ґа, Є Є Ё­вҐа ЄвЁў­ п Ја дЁЄ , Ґбвм
иЁа®ЄЁ© Їа®бв®а ¤«п ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп. ‚ ¤агЈЁе
®Ў« бвпе, ў Є®в®але ЁбЇ®«м§говбп ва ¤ЁжЁ®­­лҐ  аЁд¬ҐвЁзҐбЄЁҐ вЁЇл Ё
ўлзЁб«Ґ­Ёп ­ ¤ ­Ё¬Ё, ваг¤­® ­ ©вЁ ЇаЁ¬Ґ­Ґ­ЁҐ ¤«п Ў®«ҐҐ а §ўЁвле бвЁ«Ґ©
Їа®Ја ¬¬Ёа®ў ­Ёп, 祬  Ўбва ЄжЁп ¤ ­­ле. ‡¤Ґбм б।бвў , Ї®¤¤Ґа¦Ёў ойЁҐ
®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ, ®зҐўЁ¤­®, Ё§Ўлв®з­л.

Ќ е®¦¤Ґ­ЁҐ ®Ўй­®бвЁ б।Ё ®в¤Ґ«м­ле вЁЇ®ў бЁбвҐ¬л ЇаҐ¤бв ў«пҐв б®Ў®©
­ҐваЁўЁ «м­л© Їа®жҐбб. ‘⥯Ґ­м в Є®© ®Ўй­®бвЁ § ўЁбЁв ®в бЇ®б®Ў 
Їа®ҐЄвЁа®ў ­Ёп бЁб⥬л. ‚ Їа®жҐбᥠЇа®ҐЄвЁа®ў ­Ёп ўлпў«Ґ­ЁҐ ®Ўй­®бвЁ
Є« бб®ў ¤®«¦­® Ўлвм Ї®бв®п­­®© 楫мо. Ћ­  ¤®бвЁЈ Ґвбп ¤ўг¬п бЇ®б®Ў ¬Ё:
«ЁЎ® Їа®ҐЄвЁа®ў ­ЁҐ¬ бЇҐжЁ «м­ле Є« бб®ў, ЁбЇ®«м§гҐ¬ле Є Є "ЄЁаЇЁзЁ" ЇаЁ
Ї®бв஥­ЁЁ ¤агЈЁе, «ЁЎ® Ї®ЁбЄ®¬ Ї®е®¦Ёе Є« бб®ў ¤«п ўл¤Ґ«Ґ­Ёп Ёе ®ЎйҐ©
з бвЁ ў ®¤Ё­ Ў §®ўл© Є« бб.

‘ Ї®ЇлвЄ ¬Ё ®Ўкпб­Ёвм, зв® в Є®Ґ ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ
Їа®Ја ¬¬Ёа®ў ­ЁҐ, ­Ґ ЁбЇ®«м§гп Є®­ЄаҐв­ле Є®­бвагЄжЁ© п§лЄ®ў
Їа®Ја ¬¬Ёа®ў ­Ёп, ¬®¦­® Ї®§­ Є®¬Ёвмбп ў а Ў®в е [2] Ё [6], ЇаЁўҐ¤Ґ­­ле ў
бЇЁбЄҐ «ЁвҐа вгал ў Ј« ўҐ 11.

€в Є, ¬л гЄ § «Ё, Є Єго ¬Ё­Ё¬ «м­го Ї®¤¤Ґа¦Єг ¤®«¦Ґ­ ®ЎҐбЇҐзЁў вм п§лЄ
Їа®Ја ¬¬Ёа®ў ­Ёп ¤«п Їа®жҐ¤га­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп, ¤«п гЇапвлў ­Ёп
¤ ­­ле,  Ўбва ЄжЁЁ ¤ ­­ле Ё ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп.
’ҐЇҐам ­ҐбЄ®«мЄ® Ї®¤а®Ў­ҐҐ ®ЇЁиҐ¬ б।бвў  п§лЄ , е®вп Ё ­Ґ б ¬лҐ
бгйҐб⢥­­лҐ, ­® Ї®§ў®«пойЁҐ Ў®«ҐҐ нд䥪⨢­® ॠ«Ё§®ў вм  Ўбва ЄжЁо
¤ ­­ле Ё ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ.


1.3 "“«гз襭­л© ‘"

ЊЁ­Ё¬ «м­ п Ї®¤¤Ґа¦Є  Їа®жҐ¤га­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп ўЄ«оз Ґв дг­ЄжЁЁ,
 аЁд¬ҐвЁзҐбЄЁҐ ®ЇҐа жЁЁ, ўлЎЁа ойЁҐ ®ЇҐа в®ал Ё жЁЄ«л. Џ®¬Ё¬® нв®Ј® ¤®«¦­л
Ўлвм ЇаҐ¤®бв ў«Ґ­л ®ЇҐа жЁЁ ўў®¤ - ўлў®¤ . Ѓ §®ўлҐ п§лЄ®ўлҐ б।бвў  ‘++
г­ б«Ґ¤®ў « ®в ‘ (ўЄ«оз п гЄ § вҐ«Ё),   ®ЇҐа жЁЁ ўў®¤ -ўлў®¤ 
ЇаҐ¤®бв ў«повбп ЎЁЎ«Ё®вҐЄ®©. ‘ ¬ п § з в®з­ п Є®­жҐЇжЁп ¬®¤г«м­®бвЁ
ॠ«Ё§гҐвбп б Ї®¬®ймо ¬Ґе ­Ё§¬  а §¤Ґ«м­®© ва ­б«пжЁЁ.


1.3.1 Џа®Ја ¬¬  Ё бв ­¤ ав­л© ўлў®¤

‘ ¬ п ¬ «Ґ­мЄ п Їа®Ја ¬¬  ­  ‘++ ўлЈ«п¤Ёв в Є:

main () { }

‚ нв®© Їа®Ја ¬¬Ґ ®ЇаҐ¤Ґ«пҐвбп дг­ЄжЁп, ­ §лў Ґ¬ п main, Є®в®а п ­Ґ
Ё¬ҐҐв Ї а ¬Ґва®ў Ё ­ЁзҐЈ® ­Ґ ¤Ґ« Ґв. ”ЁЈга­лҐ бЄ®ЎЄЁ { Ё } ЁбЇ®«м§говбп ў
‘++ ¤«п ЈагЇЇЁа®ў ­Ёп ®ЇҐа в®а®ў. ‚ ¤ ­­®¬ б«гз Ґ ®­Ё ®Ў®§­ з ов ­ з «® Ё
Є®­Ґж ⥫  (Їгбв®Ј®) дг­ЄжЁЁ main. ‚ Є ¦¤®© Їа®Ја ¬¬Ґ ­  ‘++ ¤®«¦­  Ўлвм
бў®п дг­ЄжЁп main(), Ё Їа®Ја ¬¬  ­ зЁ­ Ґвбп б ўлЇ®«­Ґ­Ёп нв®© дг­ЄжЁЁ.

ЋЎлз­® Їа®Ја ¬¬  ўл¤ Ґв Є ЄЁҐ-⮠१г«мв вл. ‚®в Їа®Ја ¬¬ , Є®в®а п
ўл¤ Ґв ЇаЁўҐвбвўЁҐ Hello, World! (‚ᥬ ЇаЁўҐв!):

#include <iostream.h>

int main ()
{
cout << "Hello, World!\n";
}

‘ва®Є  #include <iostream.h> б®®Ўй Ґв ва ­б«пв®аг, зв® ­ ¤® ўЄ«озЁвм ў
Їа®Ја ¬¬г ®ЇЁб ­Ёп, ­Ґ®Ўе®¤Ё¬лҐ ¤«п а Ў®вл бв ­¤ ав­ле Ї®в®Є®ў ўў®¤ -
ўлў®¤ , Є®в®алҐ ­ е®¤пвбп ў iostream.h. ЃҐ§ нвЁе ®ЇЁб ­Ё© ўла ¦Ґ­ЁҐ

cout << "Hello, World!\n"

­Ґ Ё¬Ґ«® Ўл б¬лб« . ЋЇҐа жЁп << ("ўл¤ вм") § ЇЁблў Ґв бў®© ўв®а®©
Ї а ¬Ґва ў ЇҐаўл© Ї а ¬Ґва. ‚ ¤ ­­®¬ б«гз Ґ бва®Є  "Hello, World!\n"
§ ЇЁблў Ґвбп ў бв ­¤ ав­л© ўл室­®© Ї®в®Є cout. ‘ва®Є  - нв®
Ї®б«Ґ¤®ў вҐ«м­®бвм бЁ¬ў®«®ў, § Є«о祭­ п ў ¤ў®©­лҐ Є ўлзЄЁ. „ў  бЁ¬ў®« :
®Ўа в­®© ¤а®Ў­®© зҐавл \ Ё ­ҐЇ®б।б⢥­­® б«Ґ¤гойЁ© §  ­Ё¬ - ®Ў®§­ з ов
­ҐЄ®в®ал© бЇҐжЁ «м­л© бЁ¬ў®«. ‚ ¤ ­­®¬ б«гз Ґ \n пў«пҐвбп бЁ¬ў®«®¬ Є®­ж 
бва®ЄЁ (Ё«Ё ЇҐаҐў®¤  бва®ЄЁ), Ї®н⮬㠮­ ўл¤ Ґвбп Ї®б«Ґ бЁ¬ў®«®ў Hello,
world!

–Ґ«®Ґ §­ зҐ­ЁҐ, ў®§ўа й Ґ¬®Ґ дг­ЄжЁҐ© main(), Ґб«Ё в®«мЄ® ®­® Ґбвм,
бзЁв Ґвбп ў®§ўа й Ґ¬л¬ бЁб⥬Ґ §­ зҐ­ЁҐ¬ Їа®Ја ¬¬л. …б«Ё ­ЁзҐЈ® ­Ґ
ў®§ўа й Ґвбп, бЁб⥬  Ї®«гзЁв Є Є®Ґ-в® "¬гб®а­®Ґ" §­ зҐ­ЁҐ.

‘।бвў  ўў®¤ /ўлў®¤  Ї®в®Є®ў®© ЎЁЎ«Ё®вҐЄЁ Ї®¤а®Ў­® ®ЇЁблў овбп ў
Ј« ўҐ 10.


1.3.2 ЏҐаҐ¬Ґ­­лҐ Ё  аЁд¬ҐвЁзҐбЄЁҐ ®ЇҐа жЁЁ

Љ ¦¤®Ґ Ё¬п Ё Є ¦¤®Ґ ўла ¦Ґ­ЁҐ ®Ўп§ ­л Ё¬Ґвм вЁЇ. €¬Ґ­­® вЁЇ ®ЇаҐ¤Ґ«пҐв
®ЇҐа жЁЁ, Є®в®алҐ ¬®Јгв ўлЇ®«­пвмбп ­ ¤ ­Ё¬Ё. Ќ ЇаЁ¬Ґа, ў ®ЇЁб ­ЁЁ

int inch;

Ј®ў®аЁвбп, зв® inch Ё¬ҐҐв вЁЇ int, в.Ґ. inch пў«пҐвбп 楫®©
ЇҐаҐ¬Ґ­­®©.

ЋЇЁб ­ЁҐ - нв® ®ЇҐа в®а, Є®в®ал© ўў®¤Ёв Ё¬п ў Їа®Ја ¬¬г. ‚ ®ЇЁб ­ЁЁ
гЄ §лў Ґвбп вЁЇ Ё¬Ґ­Ё. ’ЁЇ, ў бў®о ®зҐаҐ¤м, ®ЇаҐ¤Ґ«пҐв Є Є Їа ўЁ«м­®
ЁбЇ®«м§®ў вм Ё¬п Ё«Ё ўла ¦Ґ­ЁҐ.

Ћб­®ў­лҐ вЁЇл, ­ ЁЎ®«ҐҐ ЇаЁЎ«Ё¦Ґ­­лҐ Є " ЇЇ а в­®© ॠ«м­®бвЁ" ¬ иЁ­л,
в Є®ўл:

char
short
int
long

Ћ­Ё ЇаҐ¤бв ў«пов жҐ«лҐ зЁб« . ‘«Ґ¤гойЁҐ вЁЇл:

float
double
long double

ЇаҐ¤бв ў«пов зЁб«  б Ї« ў о饩 в®зЄ®©. ЏҐаҐ¬Ґ­­ п вЁЇ  char Ё¬ҐҐв
а §¬Ґа, ­г¦­л© ¤«п еа ­Ґ­Ёп ®¤­®Ј® бЁ¬ў®«  ­  ¤ ­­®© ¬ иЁ­Ґ (®Ўлз­® нв®
®¤Ё­ Ў ©в). ЏҐаҐ¬Ґ­­ п int Ё¬ҐҐв а §¬Ґа, ­Ґ®Ўе®¤Ё¬л© ¤«п 楫®©  аЁд¬ҐвЁЄЁ
­  ¤ ­­®© ¬ иЁ­Ґ (®Ўлз­® нв® ®¤­® б«®ў®).

‘«Ґ¤гойЁҐ  аЁд¬ҐвЁзҐбЄЁҐ ®ЇҐа жЁЁ ¬®¦­® ЁбЇ®«м§®ў вм ­ ¤ «оЎл¬
б®зҐв ­ЁҐ¬ ЇҐаҐзЁб«Ґ­­ле вЁЇ®ў:

+ (Ї«об, г­ а­л© Ё ЎЁ­ а­л©)
- (¬Ё­гб, г­ а­л© Ё ЎЁ­ а­л©)
* (г¬­®¦Ґ­ЁҐ)
/ (¤Ґ«Ґ­ЁҐ)
% (®бв в®Є ®в ¤Ґ«Ґ­Ёп)

’® ¦Ґ ўҐа­® ¤«п ®ЇҐа жЁ© ®в­®иҐ­Ёп:

== (а ў­®)
!= (­Ґ а ў­®)
< (¬Ґ­миҐ зҐ¬)
<= (¬Ґ­миҐ Ё«Ё а ў­®)
>= (Ў®«миҐ Ё«Ё а ў­®)

„«п ®ЇҐа жЁ© ЇаЁбў Ёў ­Ёп Ё  аЁд¬ҐвЁзҐбЄЁе ®ЇҐа жЁ© ў ‘++ ўлЇ®«­повбп
ўбҐ ®б¬лб«Ґ­­лҐ ЇаҐ®Ўа §®ў ­Ёп ®б­®ў­ле вЁЇ®ў, зв®Ўл Ёе ¬®¦­® Ўл«®
­Ґ®Ја ­ЁзҐ­­® ЁбЇ®«м§®ў вм «оЎлҐ Ёе б®зҐв ­Ёп:

double d;
int i;
short s;
// ...
d = d + i;
i = s * i;

‘Ё¬ў®« = ®Ў®§­ з Ґв ®Ўлз­®Ґ ЇаЁбў Ёў ­ЁҐ.


1.3.3 “Є § вҐ«Ё Ё ¬ ббЁўл

Њ ббЁў ¬®¦­® ®ЇЁб вм в Є:

char v [ 10 ]; // ¬ ббЁў Ё§ 10 бЁ¬ў®«®ў

ЋЇЁб ­ЁҐ гЄ § вҐ«п Ё¬ҐҐв в Є®© ўЁ¤:

char * p; // гЄ § вҐ«м ­  бЁ¬ў®«

‡¤Ґбм [] ®§­ з Ґв "¬ ббЁў Ё§",   бЁ¬ў®« * ®§­ з Ґв "гЄ § вҐ«м ­ ".
‡­ зҐ­ЁҐ ­Ё¦­Ґ© Ја ­Ёжл Ё­¤ҐЄб  ¤«п ўбҐе ¬ ббЁў®ў а ў­® ­г«о, Ї®н⮬г v
Ё¬ҐҐв 10 н«Ґ¬Ґ­в®ў: v [ 0 ] ... v [ 9 ]. ЏҐаҐ¬Ґ­­ п вЁЇ  гЄ § вҐ«м ¬®¦Ґв
ᮤҐа¦ вм  ¤аҐб ®ЎкҐЄв  ᮮ⢥вбвўго饣® вЁЇ :

p = & v [ 3 ]; // p гЄ §лў Ґв ­  4-© н«Ґ¬Ґ­в ¬ ббЁў  v

“­ а­ п ®ЇҐа жЁп & ®§­ з Ґв ў§пвЁҐ  ¤аҐб .


1.3.4 “б«®ў­лҐ ®ЇҐа в®ал Ё жЁЄ«л

‚ ‘++ Ґбвм ва ¤ЁжЁ®­­л© ­ Ў®а ўлЎЁа ойЁе ®ЇҐа в®а®ў Ё жЁЄ«®ў. ЌЁ¦Ґ
ЇаЁў®¤пвбп ЇаЁ¬Ґал ®ЇҐа в®а®ў if, switch Ё while.

‚ б«Ґ¤го饬 ЇаЁ¬ҐаҐ Ї®Є § ­® ЇаҐ®Ўа §®ў ­ЁҐ ¤о©¬  ў б ­вЁ¬Ґва Ё
®Ўа в­®. ЏаҐ¤Ї®« Ј Ґвбп, зв® ў® ўе®¤­®¬ Ї®в®ЄҐ §­ зҐ­ЁҐ ў б ­вЁ¬Ґва е
§ ўҐаи Ґвбп бЁ¬ў®«®¬ i,   §­ зҐ­ЁҐ ў ¤о©¬ е - бЁ¬ў®«®¬ c:

#include <iostream.h>

int main ()
{
const float fac = 2.54;
float x, in, cm;
char ch = 0;

cout << "enter length: ";

cin >> x; // ўў®¤ зЁб«  б Ї« ў о饩 в®зЄ®©
cin >> ch // ўў®¤ § ўҐаи о饣® бЁ¬ў®« 

if ( ch == 'i' )
{ // ¤о©¬
in = x;
cm = x * fac;
}
else if ( ch == 'c' )
{ // б ­вЁ¬Ґвал
in = x / fac;
cm = x;
}
else
in = cm = 0;

cout << in << " in = " << cm << " cm\n";
}

ЋЇҐа жЁп >> ("ўўҐбвЁ Ё§") ЁбЇ®«м§гҐвбп Є Є ®ЇҐа в®а ўў®¤ ; cin
пў«пҐвбп бв ­¤ ав­л¬ ўе®¤­л¬ Ї®в®Є®¬. ’ЁЇ ®ЇҐа ­¤ , а бЇ®«®¦Ґ­­®Ј® бЇа ў 
®в ®ЇҐа жЁЁ >>, ®ЇаҐ¤Ґ«пҐв, Є Є®Ґ §­ зҐ­ЁҐ ўў®¤Ёвбп; ®­® § ЇЁблў Ґвбп ў
нв®в ®ЇҐа ­¤.

ЋЇҐа в®а switch (ЇҐаҐЄ«оз вҐ«м) ба ў­Ёў Ґв §­ зҐ­ЁҐ б ­ Ў®а®¬
Є®­бв ­в. Џа®ўҐаЄг ў ЇаҐ¤л¤г饬 ЇаЁ¬ҐаҐ ¬®¦­® § ЇЁб вм в Є:

switch ( ch )
{
case 'i':
in = x;
cm = x * fac;
break;
case 'c':
in = x / fac;
cm = x;
break;
default:
in = cm = 0;
break;
}

ЋЇҐа в®ал break ЁбЇ®«м§говбп ¤«п ўл室  Ё§ ЇҐаҐЄ«оз вҐ«п. ‚бҐ
Є®­бв ­вл ў аЁ ­в®ў ¤®«¦­л Ўлвм а §«Ёз­л. …б«Ё ба ў­Ёў Ґ¬®Ґ §­ зҐ­ЁҐ ­Ґ
б®ўЇ ¤ Ґв ­Ё б ®¤­®© Ё§ ­Ёе, ўлЇ®«­пҐвбп ®ЇҐа в®а б ¬ҐвЄ®© default.
‚ аЁ ­в default ¬®¦Ґв Ё ®вбгвбвў®ў вм.

ЏаЁўҐ¤Ґ¬ § ЇЁбм, § ¤ ойго Є®ЇЁа®ў ­ЁҐ 10 н«Ґ¬Ґ­в®ў ®¤­®Ј® ¬ ббЁў  ў
¤агЈ®©:

int v1 [ 10 ];
int v2 [ 10 ];
// ...
for ( int i=0; i<10; i++ ) v1 [ i ] = v2 [ i ];

‘«®ў ¬Ё нв® ¬®¦­® ўла §Ёвм в Є: "Ќ з вм б i а ў­®Ј® ­г«о, Ё Ї®Є  i
¬Ґ­миҐ 10, Є®ЇЁа®ў вм i-вл© н«Ґ¬Ґ­в Ё 㢥«ЁзЁў вм i." €­ЄаҐ¬Ґ­в (++)
ЇҐаҐ¬Ґ­­®© 楫®Ј® вЁЇ  Їа®бв® бў®¤Ёвбп Є 㢥«ЁзҐ­Ёо ­  1.


1.3.5 ”г­ЄжЁЁ

”г­ЄжЁп - нв® Ї®Ё¬Ґ­®ў ­­ п з бвм Їа®Ја ¬¬л, Є®в®а п ¬®¦Ґв ўл§лў вмбп
Ё§ ¤агЈЁе з б⥩ Їа®Ја ¬¬л бв®«мЄ® а §, бЄ®«мЄ® ­Ґ®Ўе®¤Ё¬®. ЏаЁўҐ¤Ґ¬
Їа®Ја ¬¬г, ўл¤ ойго б⥯Ґ­Ё зЁб«  ¤ў :

extern float pow ( float, int );
// pow () ®ЇаҐ¤Ґ«Ґ­  ў ¤агЈ®¬ ¬ҐбвҐ

int main ()
{
for ( int i=0; i<10; i++ ) cout << pow ( 2, i ) << '\n';
}

ЏҐаў п бва®Є  пў«пҐвбп ®ЇЁб ­ЁҐ¬ дг­ЄжЁЁ. Ћ­  § ¤ Ґв pow Є Є дг­ЄжЁо б
Ї а ¬Ґва ¬Ё вЁЇ  float Ё int, ў®§ўа й ойго §­ зҐ­ЁҐ вЁЇ  float. ЋЇЁб ­ЁҐ
дг­ЄжЁЁ ­Ґ®Ўе®¤Ё¬® ¤«п ҐҐ ўл§®ў , ҐҐ ®ЇаҐ¤Ґ«Ґ­ЁҐ ­ е®¤Ёвбп ў ¤агЈ®¬ ¬ҐбвҐ.

ЏаЁ ўл§®ўҐ дг­ЄжЁЁ вЁЇ Є ¦¤®Ј® д ЄвЁзҐбЄ®Ј® Ї а ¬Ґва  бўҐапҐвбп б
вЁЇ®¬, гЄ § ­­л¬ ў ®ЇЁб ­ЁЁ дг­ЄжЁЁ, в®з­® в Є ¦Ґ, Є Є Ґб«Ё Ўл
Ё­ЁжЁ «Ё§Ёа®ў « бм ЇҐаҐ¬Ґ­­ п ®ЇЁб ­­®Ј® вЁЇ . ќв® Ј а ­вЁагҐв ­ ¤«Ґ¦ йго
Їа®ўҐаЄг Ё ЇаҐ®Ўа §®ў ­Ёп вЁЇ®ў. Ќ ЇаЁ¬Ґа, ўл§®ў дг­ЄжЁЁ pow(12.3,"abcd")
ва ­б«пв®а б®звҐв ®иЁЎ®з­л¬, Ї®бЄ®«мЄг "abcd" пў«пҐвбп бва®Є®©,   ­Ґ
Ї а ¬Ґв஬ вЁЇ  int. ‚ ўл§®ўҐ pow(2,i) ва ­б«пв®а ЇаҐ®Ўа §гҐв 楫го
Є®­бв ­вг (楫®Ґ 2) ў зЁб«® б Ї« ў о饩 в®зЄ®© (float), Є Є в®Ј® вॡгҐв
дг­ЄжЁп. ”г­ЄжЁп pow ¬®¦Ґв Ўлвм ®ЇаҐ¤Ґ«Ґ­  б«Ґ¤гойЁ¬ ®Ўа §®¬:

float pow ( float x, int n )
{
if ( n < 0 )
error ( "®иЁЎЄ : ¤«п pow () § ¤ ­ ®ваЁж вҐ«м­л© Ї®Є § вҐ«м");
switch ( n )
{
case 0: return 1;
case 1: return x;
default: return x * pow ( x, n-1 );
}
}

ЏҐаў п з бвм ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ § ¤ Ґв ҐҐ Ё¬п, вЁЇ ў®§ўа й Ґ¬®Ј®
§­ зҐ­Ёп (Ґб«Ё ®­® Ґбвм),   в Є¦Ґ вЁЇл Ё Ё¬Ґ­  д®а¬ «м­ле Ї а ¬Ґва®ў (Ґб«Ё
®­Ё бгйҐбвўгов). ‡­ зҐ­ЁҐ ў®§ўа й Ґвбп Ё§ дг­ЄжЁЁ б Ї®¬®ймо ®ЇҐа в®а 
return.

ђ §­лҐ дг­ЄжЁЁ ®Ўлз­® Ё¬Ґов а §­лҐ Ё¬Ґ­ , ­® дг­ЄжЁп¬, ўлЇ®«­пойЁ¬
б室­лҐ ®ЇҐа жЁЁ ­ ¤ ®ЎкҐЄв ¬Ё а §­ле вЁЇ®ў, «гзиҐ ¤ вм ®¤­® Ё¬п. …б«Ё
вЁЇл Ї а ¬Ґва®ў в ЄЁе дг­ЄжЁ© а §«Ёз­л, в® ва ­б«пв®а ўбҐЈ¤  ¬®¦Ґв
а §®Ўа вмбп, Є Єго дг­ЄжЁо ­г¦­® ўл§лў вм. Ќ ЇаЁ¬Ґа, ¬®¦­® Ё¬Ґвм ¤ўҐ
дг­ЄжЁЁ ў®§ўҐ¤Ґ­Ёп ў б⥯Ґ­м: ®¤­г - ¤«п 楫ле зЁбҐ«,   ¤агЈго - ¤«п зЁбҐ«
б Ї« ў о饩 в®зЄ®©:

int pow ( int, int );
double pow ( double, double );
//...
x = pow ( 2,10 ); // ўл§®ў pow ( int, int )
y = pow ( 2.0, 10.0 );// ўл§®ў pow ( double, double )

’ Є®Ґ ¬­®Ј®Єа в­®Ґ ЁбЇ®«м§®ў ­ЁҐ Ё¬Ґ­Ё ­ §лў Ґвбп ЇҐаҐЈаг§Є®© Ё¬Ґ­Ё
дг­ЄжЁЁ Ё«Ё Їа®бв® ЇҐаҐЈаг§Є®©; ЇҐаҐЈаг§Є  а бб¬ ваЁў Ґвбп ®б®Ў® ў Ј« ўҐ
7.

Џ а ¬Ґвал дг­ЄжЁЁ ¬®Јгв ЇҐаҐ¤ ў вмбп «ЁЎ® "Ї® §­ зҐ­Ёо", «ЁЎ® "Ї®
ббл«ЄҐ". ђ бᬮваЁ¬ ®ЇаҐ¤Ґ«Ґ­ЁҐ дг­ЄжЁЁ, Є®в®а п ®бгйҐбвў«пҐв ў§ Ё¬®®Ў¬Ґ­
§­ зҐ­Ё© ¤ўге 楫ле ЇҐаҐ¬Ґ­­ле. …б«Ё ЁбЇ®«м§гҐвбп бв ­¤ ав­л© бЇ®б®Ў
ЇҐаҐ¤ зЁ Ї а ¬Ґва®ў Ї® §­ зҐ­Ёо, в® ЇаЁ¤Ґвбп ЇҐаҐ¤ ў вм гЄ § вҐ«Ё:

void swap ( int * p, int * q )
{
int t = * p;
* p = * q;
* q = t;
}

“­ а­ п ®ЇҐа жЁп * ­ §лў Ґвбп Є®бўҐ­­®бвмо (Ё«Ё ®ЇҐа жЁҐ©
ࠧ묥­®ў ­Ёп), ®­  ўлЎЁа Ґв §­ зҐ­ЁҐ ®ЎкҐЄв , ­  Є®в®ал© ­ бв஥­
гЄ § вҐ«м. ”г­ЄжЁо ¬®¦­® ўл§лў вм б«Ґ¤гойЁ¬ ®Ўа §®¬:

void f ( int i, int j )
{
swap ( & i, & j );
}

…б«Ё ЁбЇ®«м§®ў вм ЇҐаҐ¤ зг Ї а ¬Ґва  Ї® ббл«ЄҐ, ¬®¦­® ®Ў®©вЁбм ЎҐ§
пў­ле ®ЇҐа жЁ© б гЄ § вҐ«Ґ¬:

void swap (int & r1, int & r2 )
{
int t = r1;
r1 = r2;
r2 = t;
}

void g ( int i, int j )
{
swap ( i, j );
}

„«п «оЎ®Ј® вЁЇ  T § ЇЁбм T& ®§­ з Ґв "ббл«Є  ­  T". ‘бл«Є  б«г¦Ёв
бЁ­®­Ё¬®¬ в®© ЇҐаҐ¬Ґ­­®©, Є®в®а®© ®­  Ё­ЁжЁ «Ё§Ёа®ў « бм. Ћв¬ҐвЁ¬, зв®
ЇҐаҐЈаг§Є  ¤®ЇгбЄ Ґв б®бгйҐбвў®ў ­ЁҐ ¤ўге дг­ЄжЁ© swap ў ®¤­®© Їа®Ја ¬¬Ґ.


1.3.6 Њ®¤г«Ё

Џа®Ја ¬¬  ‘++ Ї®звЁ ўбҐЈ¤  б®бв®Ёв Ё§ ­ҐбЄ®«мЄЁе а §¤Ґ«м­®
ва ­б«Ёа㥬ле "¬®¤г«Ґ©". Љ ¦¤л© "¬®¤г«м" ®Ўлз­® ­ §лў Ґвбп Ёб室­л¬
д ©«®¬, ­® Ё­®Ј¤  - Ґ¤Ё­ЁжҐ© ва ­б«пжЁЁ. Ћ­ б®бв®Ёв Ё§ Ї®б«Ґ¤®ў вҐ«м­®бвЁ
®ЇЁб ­Ё© вЁЇ®ў, дг­ЄжЁ©, ЇҐаҐ¬Ґ­­ле Ё Є®­бв ­в. ЋЇЁб ­ЁҐ extern Ї®§ў®«пҐв
Ё§ ®¤­®Ј® Ёб室­®Ј® д ©«  ббл« вмбп ­  дг­ЄжЁо Ё«Ё ®ЎкҐЄв, ®ЇаҐ¤Ґ«Ґ­­лҐ ў
¤агЈ®¬ Ёб室­®¬ д ©«Ґ. Ќ ЇаЁ¬Ґа:

extern "C" double sqrt ( double );
extern ostream cout;

‘ ¬л© а бЇа®бва ­Ґ­­л© бЇ®б®Ў ®ЎҐбЇҐзЁвм б®Ј« б®ў ­­®бвм ®ЇЁб ­Ё©
ў­Ґи­Ёе ў® ўбҐе Ёб室­ле д ©« е - Ї®¬ҐбвЁвм в ЄЁҐ ®ЇЁб ­Ёп ў бЇҐжЁ «м­лҐ
д ©«л, ­ §лў Ґ¬лҐ § Ј®«®ў®з­л¬Ё. ‡ Ј®«®ў®з­лҐ д ©«л ¬®¦­® ўЄ«оз вм ў® ўбҐ
Ёб室­лҐ д ©«л, ў Є®в®але вॡговбп ®ЇЁб ­Ёп ў­Ґи­Ёе. Ќ ЇаЁ¬Ґа, ®ЇЁб ­ЁҐ
дг­ЄжЁЁ sqrt еа ­Ёвбп ў § Ј®«®ў®з­®¬ д ©«Ґ бв ­¤ ав­ле ¬ вҐ¬ вЁзҐбЄЁе
дг­ЄжЁ© б Ё¬Ґ­Ґ¬ math.h, Ї®н⮬г, Ґб«Ё ­г¦­® Ё§ў«Ґзм Єў ¤а в­л© Є®аҐ­м Ё§
4, ¬®¦­® ­ ЇЁб вм:

#include <math.h>
//...
x = sqrt ( 4 );

Џ®бЄ®«мЄг бв ­¤ ав­лҐ § Ј®«®ў®з­лҐ д ©«л ¬®Јгв ўЄ«оз вмбп ў® ¬­®ЈЁҐ
Ёб室­лҐ д ©«л, ў ­Ёе ­Ґв ®ЇЁб ­Ё©, ¤гЎ«Ёа®ў ­ЁҐ Є®в®але ¬®Ј«® Ўл ўл§ў вм
®иЁЎЄЁ. ’ Є, ⥫® дг­ЄжЁЁ ЇаЁбгвбвўгҐв ў в ЄЁе д ©« е, Ґб«Ё в®«мЄ® нв®
дг­ЄжЁп-Ї®¤бв ­®ўЄ ,   Ё­ЁжЁ «Ё§ в®ал гЄ § ­л в®«мЄ® ¤«п Є®­бв ­в ($$4.3).
ЌҐ бзЁв п в ЄЁе б«гз Ґў, § Ј®«®ў®з­л© д ©« ®Ўлз­® б«г¦Ёв еа ­Ё«ЁйҐ¬ ¤«п
вЁЇ®ў, ®­ ЇаҐ¤®бв ў«пҐв Ё­вҐадҐ©б ¬Ґ¦¤г а §¤Ґ«м­® ва ­б«Ёа㥬묨 з бвп¬Ё
Їа®Ја ¬¬л.

‚ Є®¬ ­¤Ґ ўЄ«о祭Ёп § Є«о祭­®Ґ ў гЈ«®ўлҐ бЄ®ЎЄЁ Ё¬п д ©«  (ў ­ иҐ¬
ЇаЁ¬ҐаҐ - <math.h>) ббл« Ґвбп ­  д ©«, ­ е®¤пйЁ©бп ў бв ­¤ ав­®¬ Є в «®ЈҐ
ўЄ«оз Ґ¬ле д ©«®ў. — бв® нв® - Є в «®Ј /usr/include/CC. ” ©«л, ­ е®¤пйЁҐбп
ў ¤агЈЁе Є в «®Ј е, ®Ў®§­ з овбп бў®Ё¬Ё Їг⥢묨 Ё¬Ґ­ ¬Ё, ў§пвл¬Ё ў
Є ўлзЄЁ. Џ®н⮬㠢 б«Ґ¤гойЁе Є®¬ ­¤ е:

#include "math1.h"
#include "/usr/bs/math2.h"

ўЄ«оз овбп д ©« math1.h Ё§ ⥪г饣® Є в «®Ј  Ї®«м§®ў вҐ«п Ё д ©«
math2.h Ё§ Є в «®Ј  /usr/bs.

ЏаЁўҐ¤Ґ¬ ­ҐЎ®«ми®© § Є®­зҐ­­л© ЇаЁ¬Ґа, ў Є®в®а®¬ бва®Є  ®ЇаҐ¤Ґ«пҐвбп ў
®¤­®¬ д ©«Ґ,   ЇҐз в Ґвбп ў ¤агЈ®¬. ‚ д ©«Ґ header.h ®ЇаҐ¤Ґ«повбп ­г¦­лҐ
вЁЇл:

// header.h

extern char * prog_name;
extern void f ();

” ©« main.c пў«пҐвбп ®б­®ў­®© Їа®Ја ¬¬®©:

// main.c

#include "header.h"
char * prog_name = "ЇаЁ¬ЁвЁў­л©, ­® § Є®­зҐ­­л© ЇаЁ¬Ґа";
int main ()
{
f ();
}

  бва®Є  ЇҐз в Ґвбп дг­ЄжЁҐ© Ё§ д ©«  f.c:

// f.c

#include <stream.h>
#include "header.h"
void f ()
{
cout << prog_name << '\n';
}

ЏаЁ § ЇгбЄҐ ва ­б«пв®а  ‘++ Ё ЇҐаҐ¤ зҐ Ґ¬г ­Ґ®Ўе®¤Ё¬ле
д ©«®ў-Ї а ¬Ґва®ў ў а §«Ёз­ле ॠ«Ё§ жЁпе ¬®Јгв ЁбЇ®«м§®ў вмбп а §­лҐ
а биЁаҐ­Ёп Ё¬Ґ­ ¤«п Їа®Ја ¬¬ ­  ‘++. Ќ  ¬ иЁ­Ґ  ўв®а  ва ­б«пжЁп Ё § ЇгбЄ
Їа®Ја ¬¬л ўлЈ«п¤Ёв в Є:

$ CC main.c f.c -o silly
$ silly

ЇаЁ¬ЁвЁў­л©, ­® § Є®­зҐ­­л© ЇаЁ¬Ґа

$

Ља®¬Ґ а §¤Ґ«м­®© ва ­б«пжЁЁ Є®­жҐЇжЁо ¬®¤г«м­®бвЁ ў ‘++ Ї®¤¤Ґа¦Ёў ов
Є« ббл ($$5.4).


1.4 Џ®¤¤Ґа¦Є   Ўбва ЄжЁЁ ¤ ­­ле

Џ®¤¤Ґа¦Є  Їа®Ја ¬¬Ёа®ў ­Ёп б  Ўбва ЄжЁҐ© ¤ ­­ле ў ®б­®ў­®¬ бў®¤Ёвбп Є
ў®§¬®¦­®бвЁ ®ЇаҐ¤Ґ«Ёвм ­ Ў®а ®ЇҐа жЁ© (дг­ЄжЁЁ Ё ®ЇҐа жЁЁ) ­ ¤ вЁЇ®¬. ‚бҐ
®Ўа йҐ­Ёп Є ®ЎкҐЄв ¬ нв®Ј® вЁЇ  ®Ја ­ЁзЁў овбп ®ЇҐа жЁп¬Ё Ё§ § ¤ ­­®Ј®
­ Ў®а . Ћ¤­ Є®, Ё¬Ґп в ЄЁҐ ў®§¬®¦­®бвЁ, Їа®Ја ¬¬Ёбв бЄ®а® ®Ў­ аг¦Ёў Ґв,
зв® ¤«п 㤮Ўбвў  ®ЇаҐ¤Ґ«Ґ­Ёп Ё ЁбЇ®«м§®ў ­Ёп ­®ўле вЁЇ®ў ­г¦­л ҐйҐ
­ҐЄ®в®алҐ а биЁаҐ­Ёп п§лЄ . •®а®иЁ¬ ЇаЁ¬Ґа®¬ в Є®Ј® а биЁаҐ­Ёп пў«пҐвбп
ЇҐаҐЈаг§Є  ®ЇҐа жЁ©.


1.4.1 €­ЁжЁ «Ё§ жЁп Ё г¤ «Ґ­ЁҐ

Љ®Ј¤  ЇаҐ¤бв ў«Ґ­ЁҐ вЁЇ  бЄалв®, ­Ґ®Ўе®¤Ё¬® ¤ вм Ї®«м§®ў вҐ«о б।бвў 
¤«п Ё­ЁжЁ «Ё§ жЁЁ ЇҐаҐ¬Ґ­­ле нв®Ј® вЁЇ . Џа®б⥩襥 аҐиҐ­ЁҐ - ¤®
ЁбЇ®«м§®ў ­Ёп ЇҐаҐ¬Ґ­­®© ўл§лў вм ­ҐЄ®в®аго дг­ЄжЁо ¤«п ҐҐ Ё­ЁжЁ «Ё§ жЁЁ.
Ќ ЇаЁ¬Ґа:

class vector
{
// ...
public:
void init ( init size ); // ўл§®ў init () ЇҐаҐ¤ ЇҐаўл¬
// ЁбЇ®«м§®ў ­ЁҐ¬ ®ЎкҐЄв  vector
// ...
};

void f ()
{
vector v;
// Ї®Є  v ­Ґ«м§п ЁбЇ®«м§®ў вм
v.init ( 10 );
// ⥯Ґам ¬®¦­®
}

Ќ® нв® ­ҐЄа бЁў®Ґ Ё зॢ в®Ґ ®иЁЎЄ ¬Ё аҐиҐ­ЁҐ. Ѓг¤Ґв «гзиҐ, Ґб«Ё
ᮧ¤ вҐ«м вЁЇ  ®ЇаҐ¤Ґ«Ёв ¤«п Ё­ЁжЁ «Ё§ жЁЁ ЇҐаҐ¬Ґ­­ле ­ҐЄ®в®аго
бЇҐжЁ «м­го дг­ЄжЁо. …б«Ё в Є п дг­ЄжЁп Ґбвм, в® ¤ўҐ ­Ґ§ ўЁбЁ¬лҐ ®ЇҐа жЁЁ
а §¬ҐйҐ­Ёп Ё Ё­ЁжЁ «Ё§ жЁЁ ЇҐаҐ¬Ґ­­®© б®ў¬Ґй овбп ў ®¤­®© (Ё­®Ј¤  ҐҐ
­ §лў ов Ё­бв ««пжЁҐ© Ё«Ё Їа®бв® Ї®бв஥­ЁҐ¬). ”г­ЄжЁп Ё­ЁжЁ «Ё§ жЁЁ
­ §лў Ґвбп Є®­бвагЄв®а®¬. Љ®­бвагЄв®а ўл¤Ґ«пҐвбп б।Ё ўбҐе Їа®зЁе дг­ЄжЁ©
¤ ­­®Ј® Є« бб  вҐ¬, зв® Ё¬ҐҐв в Є®Ґ ¦Ґ Ё¬п, Є Є Ё б ¬ Є« бб. …б«Ё ®ЎкҐЄвл
­ҐЄ®в®а®Ј® вЁЇ  бва®пвбп ­ҐваЁўЁ «м­®, в® ­г¦­  ҐйҐ ®¤­  ¤®Ї®«­ЁвҐ«м­ п
®ЇҐа жЁп ¤«п г¤ «Ґ­Ёп Ёе Ї®б«Ґ Ї®б«Ґ¤­ҐЈ® ЁбЇ®«м§®ў ­Ёп. ”г­ЄжЁп г¤ «Ґ­Ёп
ў ‘++ ­ §лў Ґвбп ¤ҐбвагЄв®а®¬. „ҐбвагЄв®а Ё¬ҐҐв в® ¦Ґ Ё¬п, зв® Ё ҐЈ®
Є« бб, ­® ЇҐаҐ¤ ­Ё¬ бв®Ёв бЁ¬ў®« ~ (ў ‘++ нв®в бЁ¬ў®« ЁбЇ®«м§гҐвбп ¤«п
®ЇҐа жЁЁ ¤®Ї®«­Ґ­Ёп). ЏаЁўҐ¤Ґ¬ ЇаЁ¬Ґа:

class vector
{
int sz; // зЁб«® н«Ґ¬Ґ­в®ў
int * v; // гЄ § вҐ«м ­  楫лҐ
public:
vector ( int ); // Є®­бвагЄв®а
~vector (); // ¤ҐбвагЄв®а
int& operator [] ( int index ); // ®ЇҐа жЁп Ё­¤ҐЄб жЁЁ
};

Љ®­бвагЄв®а Є« бб  vector ¬®¦­® ЁбЇ®«м§®ў вм ¤«п Є®­ва®«п ­ ¤ ®иЁЎЄ ¬Ё
Ё ўл¤Ґ«Ґ­Ёп Ї ¬пвЁ:

vector::vector ( int s )
{
if ( s <= 0 )
error ( "­Ґ¤®ЇгбвЁ¬л© а §¬Ґа ўҐЄв®а " );
sz = s;
v = new int [ s ]; // а §¬ҐбвЁвм ¬ ббЁў Ё§ s 楫ле
}

„ҐбвагЄв®а Є« бб  vector ®бў®Ў®¦¤ Ґв ЁбЇ®«м§®ў ўигобп Ї ¬пвм:

vector::~vector ()
{
delete [] v; // ®бў®Ў®¤Ёвм ¬ ббЁў, ­  Є®в®ал©
// ­ бв஥­ гЄ § вҐ«м v
}

Ћв ॠ«Ё§ жЁЁ ‘++ ­Ґ вॡгҐвбп ®бў®Ў®¦¤Ґ­Ёп ўл¤Ґ«Ґ­­®© б Ї®¬®ймо new
Ї ¬пвЁ, Ґб«Ё ­  ­ҐҐ Ў®«миҐ ­Ґ ббл« Ґвбп ­Ё ®¤Ё­ гЄ § вҐ«м (Ё­л¬Ё б«®ў ¬Ё,
­Ґ вॡгҐвбп  ўв®¬ вЁзҐбЄ п "бЎ®аЄ  ¬гб®а "). ‚ § ¬Ґ­ нв®Ј® ¬®¦­® ЎҐ§
ў¬Ґи вҐ«мбвў  Ї®«м§®ў вҐ«п ®ЇаҐ¤Ґ«Ёвм ў Є« бᥠᮡб⢥­­лҐ дг­ЄжЁЁ
гЇа ў«Ґ­Ёп Ї ¬пвмо. ќв® вЁЇЁз­л© бЇ®б®Ў ЇаЁ¬Ґ­Ґ­Ёп Є®­бвагЄв®а®ў Ё
¤ҐбвагЄв®а®ў, е®вп Ґбвм ¬­®Ј® ­Ґ бўп§ ­­ле б гЇа ў«Ґ­ЁҐ¬ Ї ¬пвмо
ЇаЁ¬Ґ­Ґ­Ё© нвЁе дг­ЄжЁ© (б¬., ­ ЇаЁ¬Ґа, $$9.4).


1.4.2 ЏаЁбў Ёў ­ЁҐ Ё Ё­ЁжЁ «Ё§ жЁп

„«п ¬­®ЈЁе вЁЇ®ў § ¤ з  гЇа ў«Ґ­Ёп Ё¬Ё бў®¤Ёвбп Є Ї®бв஥­Ёо Ё
г­Ёз⮦Ґ­Ёо бўп§ ­­ле б ­Ё¬Ё ®ЎкҐЄв®ў, ­® Ґбвм вЁЇл, ¤«п Є®в®але нв®Ј®
¬ «®. €­®Ј¤  ­Ґ®Ўе®¤Ё¬® гЇа ў«пвм ўбҐ¬Ё ®ЇҐа жЁп¬Ё Є®ЇЁа®ў ­Ёп. ‚Ґа­Ґ¬бп
Є Є« ббг vector:

void f ()
{
vector v1 ( 100 );
vector v2 = v1; // Ї®бв஥­ЁҐ ­®ў®Ј® ўҐЄв®а  v2,
// Ё­ЁжЁ «Ё§Ёа㥬®Ј® v1
v1 = v2; // v2 ЇаЁбў Ёў Ґвбп v1
// ...
}

„®«¦­  Ўлвм ў®§¬®¦­®бвм ®ЇаҐ¤Ґ«Ёвм Ё­вҐаЇаҐв жЁо ®ЇҐа жЁ©
Ё­ЁжЁ «Ё§ жЁЁ v2 Ё ЇаЁбў Ёў ­Ёп v1. Ќ ЇаЁ¬Ґа, ў ®ЇЁб ­ЁЁ:

class vector
{
int * v;
int sz;
public:
// ...
void operator = ( const vector & ); // ЇаЁбў Ёў ­ЁҐ
vector ( const vector & ); // Ё­ЁжЁ «Ё§ жЁп
};

гЄ §лў Ґвбп, зв® ЇаЁбў Ёў ­ЁҐ Ё Ё­ЁжЁ «Ё§ жЁп ®ЎкҐЄв®ў вЁЇ  vector
¤®«¦­л ўлЇ®«­пвмбп б Ї®¬®ймо ®ЇаҐ¤Ґ«Ґ­­ле Ї®«м§®ў вҐ«Ґ¬ ®ЇҐа жЁ©.
ЏаЁбў Ёў ­ЁҐ ¬®¦­® ®ЇаҐ¤Ґ«Ёвм в Є:

void vector::operator = ( const vector & a )
// Є®­ва®«м а §¬Ґа  Ё Є®ЇЁа®ў ­ЁҐ н«Ґ¬Ґ­в®ў
{
if ( sz != a.sz )
error ( "­Ґ¤®ЇгбвЁ¬л© а §¬Ґа ўҐЄв®а  ¤«п =" );
for ( int i = 0; i < sz; i++ ) v [ i ] = a.v [ i ];
}

Џ®бЄ®«мЄг нв  ®ЇҐа жЁп ЁбЇ®«м§гв ¤«п ЇаЁбў Ёў ­Ёп "бв а®Ґ §­ зҐ­ЁҐ"
ўҐЄв®а , ®ЇҐа жЁп Ё­ЁжЁ «Ё§ жЁЁ ¤®«¦­  § ¤ ў вмбп ¤агЈ®© дг­ЄжЁҐ©,
­ ЇаЁ¬Ґа, в Є®©:

vector::vector ( const vector & a )
// Ё­ЁжЁ «Ё§ жЁп ўҐЄв®а  §­ зҐ­ЁҐ¬ ¤агЈ®Ј® ўҐЄв®а 
{
sz = a.sz; // а §¬Ґа в®в ¦Ґ
v = new int [ sz ]; // ўл¤Ґ«Ёвм Ї ¬пвм ¤«п ¬ ббЁў 
for ( int i = 0; i < sz; i++ ) //Є®ЇЁа®ў ­ЁҐ н«Ґ¬Ґ­в®ў
v [ i ] = a.v [ i ];
}

‚ п§лЄҐ ‘++ Є®­бвагЄв®а ўЁ¤  T(const T&) ­ §лў Ґвбп Є®­бвагЄв®а®¬
Є®ЇЁа®ў ­Ёп ¤«п вЁЇ  T. ‹оЎго Ё­ЁжЁ «Ё§ жЁо ®ЎкҐЄв®ў вЁЇ  T ®­ ўлЇ®«­пҐв б
Ї®¬®ймо §­ зҐ­Ёп ­ҐЄ®в®а®Ј® ¤агЈ®Ј® ®ЎкҐЄв  вЁЇ  T. Џ®¬Ё¬® пў­®©
Ё­ЁжЁ «Ё§ жЁЁ Є®­бвагЄв®ал ўЁ¤  T(const T&) ЁбЇ®«м§говбп ¤«п ЇҐаҐ¤ зЁ
Ї а ¬Ґва®ў Ї® §­ зҐ­Ёо Ё Ї®«г祭Ёп ў®§ўа й Ґ¬®Ј® дг­ЄжЁҐ© §­ зҐ­Ёп.


1.4.3  Ў«®­л вЁЇ 

‡ зҐ¬ Їа®Ја ¬¬Ёбвг ¬®¦Ґв Ї®­ ¤®ЎЁвмбп ®ЇаҐ¤Ґ«Ёвм в Є®© вЁЇ, Є Є ўҐЄв®а
楫ле зЁбҐ«? Љ Є Їа ўЁ«®, Ґ¬г ­г¦Ґ­ ўҐЄв®а Ё§ н«Ґ¬Ґ­в®ў, вЁЇ Є®в®але
­ҐЁ§ўҐб⥭ ᮧ¤ вҐ«о Є« бб  Vector. ‘«Ґ¤®ў вҐ«м­®, ­ ¤® б㬥вм ®ЇаҐ¤Ґ«Ёвм
вЁЇ ўҐЄв®а  в Є, зв®Ўл вЁЇ н«Ґ¬Ґ­в®ў ў н⮬ ®ЇаҐ¤Ґ«Ґ­ЁЁ гз бвў®ў « Є Є
Ї а ¬Ґва, ®Ў®§­ з ойЁ© "ॠ«м­лҐ" вЁЇл н«Ґ¬Ґ­в®ў:

template < class T > class Vector
{ // ўҐЄв®а н«Ґ¬Ґ­в®ў вЁЇ  T
T * v;
int sz;
public:
Vector ( int s )
{
if ( s <= 0 )
error ( "­Ґ¤®ЇгбвЁ¬л© ¤«п Vector а §¬Ґа" );
v = new T [ sz = s ];
// ўл¤Ґ«Ёвм Ї ¬пвм ¤«п ¬ ббЁў  s вЁЇ  T
}
T & operator [] ( int i );
int size () { return sz; }
// ...
};

’ Є®ў® ®ЇаҐ¤Ґ«Ґ­ЁҐ и Ў«®­  вЁЇ . Ћ­ § ¤ Ґв бЇ®б®Ў Ї®«г祭Ёп ᥬҐ©бвў 
б室­ле Є« бб®ў. ‚ ­ иҐ¬ ЇаЁ¬ҐаҐ и Ў«®­ вЁЇ  Vector Ї®Є §лў Ґв, Є Є ¬®¦­®
Ї®«гзЁвм Є« бб ўҐЄв®а ¤«п § ¤ ­­®Ј® вЁЇ  ҐЈ® н«Ґ¬Ґ­в®ў. ќв® ®ЇЁб ­ЁҐ
®в«Ёз Ґвбп ®в ®Ўлз­®Ј® ®ЇЁб ­Ёп Є« бб  ­ «ЁзЁҐ¬ ­ з «м­®© Є®­бвагЄжЁЁ
template<class T>, Є®в®а п Ё Ї®Є §лў Ґв, зв® ®ЇЁблў Ґвбп ­Ґ Є« бб,  
и Ў«®­ вЁЇ  б § ¤ ­­л¬ Ї а ¬Ґв஬-вЁЇ®¬ (§¤Ґбм ®­ ЁбЇ®«м§гҐвбп Є Є вЁЇ
н«Ґ¬Ґ­в®ў). ’ҐЇҐам ¬®¦­® ®ЇаҐ¤Ґ«пвм Ё ЁбЇ®«м§®ў вм ўҐЄв®а  а §­ле вЁЇ®ў:

void f ()
{
Vector < int > v1 ( 100 ); // ўҐЄв®а Ё§ 100 楫ле
Vector < complex > v2 ( 200 ); // ўҐЄв®а Ё§ 200
// Є®¬Ї«ҐЄб­ле зЁбҐ«
v2 [ i ] = complex ( v1 [ x ], v1 [ y ] );
// ...
}

‚®§¬®¦­®бвЁ, Є®в®алҐ аҐ «Ё§гҐв и Ў«®­ вЁЇ , Ё­®Ј¤  ­ §лў овбп
Ї а ¬ҐваЁзҐбЄЁ¬Ё вЁЇ ¬Ё Ё«Ё ЈҐ­ҐаЁзҐбЄЁ¬Ё ®ЎкҐЄв ¬Ё. Ћ­® б室­® б
ў®§¬®¦­®бвп¬Ё, Ё¬ҐойЁ¬Ёбп ў п§лЄ е Clu Ё Ђ¤ . €бЇ®«м§®ў ­ЁҐ и Ў«®­  вЁЇ 
­Ґ ў«ҐзҐв §  б®Ў®© Є ЄЁе-«ЁЎ® ¤®Ї®«­ЁвҐ«м­ле а б室®ў ўаҐ¬Ґ­Ё Ї® ба ў­Ґ­Ёо
б ЁбЇ®«м§®ў ­ЁҐ¬ Є« бб , ў Є®в®а®¬ ўбҐ вЁЇл гЄ § ­л ­ҐЇ®б।б⢥­­®.


1.4.4 ЋЎа Ў®вЄ  ®б®Ўле бЁвг жЁ©

Џ® ¬ҐаҐ а®бв  Їа®Ја ¬¬,   ®б®ЎҐ­­® ЇаЁ  ЄвЁў­®¬ ЁбЇ®«м§®ў ­ЁЁ
ЎЁЎ«Ё®вҐЄ Ї®пў«пҐвбп ­Ґ®Ўе®¤Ё¬®бвм бв ­¤ ав­®© ®Ўа Ў®вЄЁ ®иЁЎ®Є (Ё«Ё, ў
Ў®«ҐҐ иЁа®Є®¬ б¬лб«Ґ, "®б®Ўле бЁвг жЁ©"). џ§лЄЁ Ђ¤ , Ђ«Ј®«-68 Ё Clu
Ї®¤¤Ґа¦Ёў ов бв ­¤ ав­л© бЇ®б®Ў ®Ўа Ў®вЄЁ ®б®Ўле бЁвг жЁ©.

‘­®ў  ўҐа­Ґ¬бп Є Є« ббг vector. —в® ­г¦­® ¤Ґ« вм, Є®Ј¤  ®ЇҐа жЁЁ
Ё­¤ҐЄб жЁЁ ЇҐаҐ¤ ­® §­ зҐ­ЁҐ Ё­¤ҐЄб , ўл室п饥 §  Ја ­Ёжл ¬ ббЁў ?
‘®§¤ вҐ«м Є« бб  vector ­Ґ §­ Ґв, ­  зв® а ббзЁвлў Ґв Ї®«м§®ў вҐ«м ў в Є®¬
б«гз Ґ,   Ї®«м§®ў вҐ«м ­Ґ ¬®¦Ґв ®Ў­ аг¦Ёвм Ї®¤®Ў­го ®иЁЎЄг (Ґб«Ё Ўл ¬®Ј,
в® нв  ®иЁЎЄ  ў®®ЎйҐ ­Ґ ў®§­ЁЄ«  Ўл). ‚л室 в Є®©: ᮧ¤ вҐ«м Є« бб 
®Ў­ аг¦Ёў Ґв ®иЁЎЄг ўл室  §  Ја ­Ёжг ¬ ббЁў , ­® в®«мЄ® б®®Ўй Ґв ® ­Ґ©
­ҐЁ§ўҐбв­®¬г Ї®«м§®ў вҐ«о. Џ®«м§®ў вҐ«м б ¬ ЇаЁ­Ё¬ Ґв ­Ґ®Ўе®¤Ё¬лҐ ¬Ґал.
Ќ ЇаЁ¬Ґа:

class vector {
// ®ЇаҐ¤Ґ«Ґ­ЁҐ вЁЇ  ў®§¬®¦­ле ®б®Ўле бЁвг жЁ©
class range { };
// ...
};

‚¬Ґбв® ўл§®ў  дг­ЄжЁЁ ®иЁЎЄЁ ў дг­ЄжЁЁ vector::operator[]() ¬®¦­®
ЇҐаҐ©вЁ ­  вг з бвм Їа®Ја ¬¬л, ў Є®в®а®© ®Ўа Ў влў овбп ®б®ЎлҐ бЁвг жЁЁ.
ќв® ­ §лў Ґвбп "§ ЇгбвЁвм ®б®Ўго бЁвг жЁо" ("throw the exception"):

int & vector::operator [] ( int i )
{
if ( i < 0 || sz <= i ) throw range ();
return v [ i ];
}

‚ १г«мв вҐ Ё§ б⥪  Ўг¤Ґв ўлЎЁа вмбп Ё­д®а¬ жЁп, Ї®¬Ґй Ґ¬ п вг¤  ЇаЁ
ўл§®ў е дг­ЄжЁ©, ¤® вҐе Ї®а, Ї®Є  ­Ґ Ўг¤Ґв ®Ў­ а㦥­ ®Ўа Ў®взЁЄ ®б®Ў®©
бЁвг жЁЁ б вЁЇ®¬ range ¤«п Є« бб  ўҐЄв®а (vector::range); ®­ Ё Ўг¤Ґв
ўлЇ®«­пвмбп.

ЋЎа Ў®взЁЄ ®б®Ўле бЁвг жЁ© ¬®¦­® ®ЇаҐ¤Ґ«Ёвм в®«мЄ® ¤«п бЇҐжЁ «м­®Ј®
Ў«®Є :

void f ( int i )
{
try
{
// ў н⮬ Ў«®ЄҐ ®Ўа Ў влў овбп ®б®ЎлҐ бЁвг жЁЁ
// б Ї®¬®ймо ®ЇаҐ¤Ґ«Ґ­­®Ј® ­Ё¦Ґ ®Ўа Ў®взЁЄ 
vector v ( i );
// ...
v [ i + 1 ] = 7; // ЇаЁў®¤Ёв Є ®б®Ў®© бЁвг жЁЁ range
// ...
g (); // ¬®¦Ґв ЇаЁўҐбвЁ Є ®б®Ў®© бЁвг жЁЁ range
// ­  ­ҐЄ®в®але ўҐЄв®а е
}
catch ( vector::range )
{
error ( "f (): vector range error" );
return;
}
}

€бЇ®«м§®ў ­ЁҐ ®б®Ўле бЁвг жЁ© ¤Ґ« Ґв ®Ўа Ў®вЄг ®иЁЎ®Є Ў®«ҐҐ
гЇ®а冷祭­®© Ё Ї®­пв­®©. ЋЎб㦤Ґ­ЁҐ Ё Ї®¤а®Ў­®бвЁ ®в«®¦Ё¬ ¤® Ј« ўл 9.


1.4.5 ЏаҐ®Ўа §®ў ­Ёп вЁЇ®ў

ЋЇаҐ¤Ґ«пҐ¬лҐ Ї®«м§®ў вҐ«Ґ¬ ЇаҐ®Ўа §®ў ­Ёп вЁЇ , ­ ЇаЁ¬Ґа, в ЄЁҐ, Є Є
ЇаҐ®Ўа §®ў ­ЁҐ зЁб«  б Ї« ў о饩 в®зЄ®© ў Є®¬Ї«ҐЄб­®Ґ, Є®в®а®Ґ ­Ґ®Ўе®¤Ё¬®
¤«п Є®­бвагЄв®а  complex(double), ®Є § «Ёбм ®зҐ­м Ї®«Ґ§­л¬Ё ў ‘++.
Џа®Ја ¬¬Ёбв ¬®¦Ґв § ¤ ў вм нвЁ ЇаҐ®Ўа §®ў ­Ёп пў­®,   ¬®¦Ґв Ї®« Ј вмбп ­ 
ва ­б«пв®а, Є®в®ал© ўлЇ®«­пҐв Ёе ­Ґпў­® ў ⮬ б«гз Ґ, Є®Ј¤  ®­Ё ­Ґ®Ўе®¤Ё¬л
Ё ®¤­®§­ з­л:

complex a = complex ( 1 );
complex b = 1; // ­Ґпў­®: 1 -> complex ( 1 )
a = b + complex ( 2 );
a = b + 2; // ­Ґпў­®: 2 -> complex ( 2)

ЏаҐ®Ўа §®ў ­Ёп вЁЇ®ў ­г¦­л ў ‘++ Ї®в®¬г, зв®  аЁд¬ҐвЁзҐбЄЁҐ ®ЇҐа жЁЁ
ᮠᬥ蠭­л¬Ё вЁЇ ¬Ё пў«повбп ­®а¬®© ¤«п п§лЄ®ў, ЁбЇ®«м§гҐ¬ле ў зЁб«®ўле
§ ¤ з е. Ља®¬Ґ в®Ј®, Ў®«ми п з бвм Ї®«м§®ў вҐ«мбЄЁе вЁЇ®ў, ЁбЇ®«м§гҐ¬ле
¤«п "ўлзЁб«Ґ­Ё©" (­ ЇаЁ¬Ґа, ¬ ваЁжл, бва®ЄЁ, ¬ иЁ­­лҐ  ¤аҐб ) ¤®ЇгбЄ Ґв
ҐбвҐб⢥­­®Ґ ЇаҐ®Ўа §®ў ­ЁҐ ў ¤агЈЁҐ вЁЇл (Ё«Ё Ё§ ¤агЈЁе вЁЇ®ў).

ЏаҐ®Ўа §®ў ­Ёп вЁЇ®ў бЇ®б®Ўбвўгов Ў®«ҐҐ ҐбвҐб⢥­­®© § ЇЁбЁ Їа®Ја ¬¬л:

complex a = 2;
complex b = a + 2; // нв® ®§­ з Ґв: operator + ( a, complex ( 2 ))
b = 2 + a; // нв® ®§­ з Ґв: operator + ( complex ( 2 ), a )

‚ ®Ў®Ёе б«гз пе ¤«п ўлЇ®«­Ґ­Ёп ®ЇҐа жЁЁ "+" ­г¦­  в®«мЄ® ®¤­  дг­ЄжЁп,
  ҐҐ Ї а ¬Ґвал Ґ¤Ё­®®Ўа §­® ва Євговбп бЁб⥬®© вЁЇ®ў п§лЄ . Ѓ®«ҐҐ в®Ј®,
Є« бб complex ®ЇЁблў Ґвбп в Є, зв® ¤«п ҐбвҐб⢥­­®Ј® Ё ЎҐбЇаҐЇпвб⢥­­®Ј®
®Ў®ЎйҐ­Ёп Ї®­пвЁп зЁб«  ­Ґв ­Ґ®Ўе®¤Ё¬®бвЁ зв®-в® Ё§¬Ґ­пвм ¤«п 楫ле зЁбҐ«.


1.4.6 Њ­®¦Ґб⢥­­лҐ ॠ«Ё§ жЁЁ

Ћб­®ў­лҐ б।бвў , Ї®¤¤Ґа¦Ёў ойЁҐ ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ
Їа®Ја ¬¬Ёа®ў ­ЁҐ,   Ё¬Ґ­­®: Їа®Ё§ў®¤­лҐ Є« ббл Ё ўЁавг «м­лҐ дг­ЄжЁЁ,-
¬®¦­® ЁбЇ®«м§®ў вм Ё ¤«п Ї®¤¤Ґа¦ЄЁ  Ўбва ЄжЁЁ ¤ ­­ле, Ґб«Ё ¤®ЇгбвЁвм
­ҐбЄ®«мЄ® ॠ«Ё§ жЁ© ®¤­®Ј® вЁЇ . ‚Ґа­Ґ¬бп Є ЇаЁ¬Ґаг б® б⥪®¬:

template < class T >
class stack
{
public:
virtual void push ( T ) = 0; // зЁбв п ўЁавг «м­ п дг­ЄжЁп
virtual T pop () = 0; // зЁбв п ўЁавг «м­ п дг­ЄжЁп
};

ЋЎ®§­ зҐ­ЁҐ =0 Ї®Є §лў Ґв, зв® ¤«п ўЁавг «м­®© дг­ЄжЁЁ ­Ґ вॡгҐвбп
­ЁЄ Є®Ј® ®ЇаҐ¤Ґ«Ґ­Ёп,   Є« бб stack пў«пҐвбп  Ўбва Єв­л¬, в.Ґ. ®­ ¬®¦Ґв
ЁбЇ®«м§®ў вмбп в®«мЄ® Є Є Ў §®ўл© Є« бб. Џ®н⮬г б⥪Ё ¬®¦­® ЁбЇ®«м§®ў вм,
­® ­Ґ ᮧ¤ ў вм:

class cat { /* ... */ };
stack < cat > s; // ®иЁЎЄ : б⥪ -  Ўбва Єв­л© Є« бб

void some_function ( stack <cat> & s, cat kitty ) // ­®а¬ «м­®
{
s.push ( kitty );
cat c2 = s.pop ();
// ...
}

Џ®бЄ®«мЄг Ё­вҐа䥩б б⥪  ­ЁзҐЈ® ­Ґ б®®Ўй Ґв ® ҐЈ® ЇаҐ¤бв ў«Ґ­ЁЁ, ®в
Ї®«м§®ў вҐ«Ґ© б⥪  Ї®«­®бвмо бЄалвл ¤Ґв «Ё ҐЈ® ॠ«Ё§ жЁЁ.

Њ®¦­® ЇаҐ¤«®¦Ёвм ­ҐбЄ®«мЄ® а §«Ёз­ле ॠ«Ё§ жЁ© б⥪ . Ќ ЇаЁ¬Ґа, б⥪
¬®¦Ґв Ўлвм ¬ ббЁў®¬:

template < class T >
class astack : public stack < T >
{
// ЁбвЁ­­®Ґ ЇаҐ¤бв ў«Ґ­ЁҐ ®ЎкҐЄв  вЁЇ  б⥪
// ў ¤ ­­®¬ б«гз Ґ - нв® ¬ ббЁў
// ...
public:
astack ( int size );
~astack ();

void push ( T );
T pop ();
};

Њ®¦­® ॠ«Ё§®ў вм б⥪ Є Є бўп§ ­­л© бЇЁб®Є:

template < class T >
class lstack : public stack < T >
{
// ...
};

’ҐЇҐам ¬®¦­® ᮧ¤ ў вм Ё ЁбЇ®«м§®ў вм б⥪Ё:

void g ()
{
lstack < cat > s1 ( 100 );
astack < cat > s2 ( 100 );

cat Ginger;
cat Snowball;

some_function ( s1, Ginger );
some_function ( s2, Snowball );
}

Ћ ⮬, Є Є ЇаҐ¤бв ў«пвм б⥪Ё а §­ле ўЁ¤®ў, ¤®«¦Ґ­ ЎҐбЇ®Є®Ёвмбп в®«мЄ®
в®в, Єв® Ёе ᮧ¤ Ґв (в.Ґ. дг­ЄжЁп g()),   Ї®«м§®ў вҐ«м б⥪  (в.Ґ.  ўв®а
дг­ЄжЁЁ some_function()) Ї®«­®бвмо ®Ја ¦¤Ґ­ ®в ¤Ґв «Ґ© Ёе ॠ«Ё§ жЁЁ.
Џ« в®© §  Ї®¤®Ў­го ЈЁЎЄ®бвм пў«пҐвбп в®, зв® ўбҐ ®ЇҐа жЁЁ ­ ¤ б⥪ ¬Ё
¤®«¦­л Ўлвм ўЁавг «м­л¬Ё дг­ЄжЁп¬Ё.


1.5 Џ®¤¤Ґа¦Є  ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп

Џ®¤¤Ґа¦Єг ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп ®ЎҐбЇҐзЁў ов
Є« ббл ў¬ҐбвҐ б ¬Ґе ­Ё§¬®¬ ­ б«Ґ¤®ў ­Ёп,   в Є¦Ґ ¬Ґе ­Ё§¬ ўл§®ў 
дг­ЄжЁ©-з«Ґ­®ў ў § ўЁбЁ¬®бвЁ ®в ЁбвЁ­­®Ј® вЁЇ  ®ЎкҐЄв  (¤Ґ«® ў ⮬, зв®
ў®§¬®¦­л б«гз Ё, Є®Ј¤  нв®в вЁЇ ­ҐЁ§ўҐб⥭ ­  бв ¤ЁЁ ва ­б«пжЁЁ). Ћб®ЎҐ­­®
ў ¦­го а®«м ЁЈа Ґв ¬Ґе ­Ё§¬ ўл§®ў  дг­ЄжЁ©-з«Ґ­®ў. ЌҐ ¬Ґ­ҐҐ ў ¦­л
б।бвў , Ї®¤¤Ґа¦Ёў ойЁҐ  Ўбва ЄжЁо ¤ ­­ле (® ­Ёе ¬л Ј®ў®аЁ«Ё а ­ҐҐ). ‚бҐ
¤®ў®¤л ў Ї®«м§г  Ўбва ЄжЁЁ ¤ ­­ле Ё Ў §ЁагойЁебп ­  ­Ґ© ¬Ґв®¤®ў, Є®в®алҐ
Ї®§ў®«пов ҐбвҐб⢥­­® Ё Єа бЁў® а Ў®в вм б вЁЇ ¬Ё, ¤Ґ©бвўгов Ё ¤«п п§лЄ ,
Ї®¤¤Ґа¦Ёў о饣® ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ. “бЇҐе ®Ў®Ёе
¬Ґв®¤®ў § ўЁбЁв ®в бЇ®б®Ў  Ї®бв஥­Ёп вЁЇ®ў, ®в в®Ј®, ­ бЄ®«мЄ® ®­Ё
Їа®бвл, ЈЁЎЄЁ Ё нд䥪⨢­л. ЊҐв®¤ ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј®
Їа®Ја ¬¬Ёа®ў ­Ёп Ї®§ў®«пҐв ®ЇаҐ¤Ґ«пвм Ў®«ҐҐ ®ЎйЁҐ Ё ЈЁЎЄЁҐ
Ї®«м§®ў вҐ«мбЄЁҐ вЁЇл Ї® ба ў­Ґ­Ёо б ⥬Ё, Є®в®алҐ Ї®«гз овбп, Ґб«Ё
ЁбЇ®«м§®ў вм в®«мЄ®  Ўбва ЄжЁо ¤ ­­ле.


1.5.1 ЊҐе ­Ё§¬ ўл§®ў 

Ћб­®ў­®Ґ б।бвў® Ї®¤¤Ґа¦ЄЁ ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп
- нв® ¬Ґе ­Ё§¬ ўл§®ў  дг­ЄжЁЁ-з«Ґ­  ¤«п ¤ ­­®Ј® ®ЎкҐЄв , Є®Ј¤  ЁбвЁ­­л©
вЁЇ ҐЈ® ­  бв ¤ЁЁ ва ­б«пжЁЁ ­ҐЁ§ўҐб⥭. Џгбвм, ­ ЇаЁ¬Ґа, Ґбвм гЄ § вҐ«м
p. Љ Є Їа®Ёб室Ёв ўл§®ў p->rotate(45)? Џ®бЄ®«мЄг ‘++ Ў §ЁагҐвбп ­ 
бв вЁзҐбЄ®¬ Є®­ва®«Ґ вЁЇ®ў, § ¤ о饥 ўл§®ў ўла ¦Ґ­ЁҐ Ё¬ҐҐв б¬лб« в®«мЄ®
ЇаЁ гб«®ўЁЁ, зв® дг­ЄжЁп rotate() 㦥 Ўл«  ®ЇЁб ­ . „ «ҐҐ, Ё§ ®Ў®§­ зҐ­Ёп
p->rotate() ¬л ўЁ¤Ё¬, зв® p пў«пҐвбп гЄ § вҐ«Ґ¬ ­  ®ЎкҐЄв ­ҐЄ®в®а®Ј®
Є« бб ,   rotate ¤®«¦­  Ўлвм з«Ґ­®¬ нв®Ј® Є« бб . Љ Є Ё ЇаЁ ўбпЄ®¬
бв вЁзҐбЄ®¬ Є®­ва®«Ґ вЁЇ®ў Їа®ўҐаЄ  Є®а४⭮бвЁ ўл§®ў  ­г¦­  ¤«п в®Ј®,
зв®Ўл гЎҐ¤Ёвмбп (­ бЄ®«мЄ® нв® ў®§¬®¦­® ­  бв ¤ЁЁ ва ­б«пжЁЁ), зв® вЁЇл ў
Їа®Ја ¬¬Ґ ЁбЇ®«м§говбп ­ҐЇа®вЁў®аҐзЁўл¬ ®Ўа §®¬. ’Ґ¬ б ¬л¬ Ј а ­вЁагҐвбп,
зв® Їа®Ја ¬¬  бў®Ў®¤­  ®в ¬­®ЈЁе ўЁ¤®ў ®иЁЎ®Є.

€в Є, ва ­б«пв®аг ¤®«¦­® Ўлвм Ё§ўҐбв­® ®ЇЁб ­ЁҐ Є« бб ,  ­ «®ЈЁз­®Ґ
⥬, зв® ЇаЁў®¤Ё«Ёбм ў $$1.2.5:

class shape
{
// ...
public:
// ...
virtual void rotate ( int );
// ...
};

  гЄ § вҐ«м p ¤®«¦Ґ­ Ўлвм ®ЇЁб ­, ­ ЇаЁ¬Ґа, в Є:

T * p;

Ј¤Ґ T - Є« бб shape Ё«Ё Їа®Ё§ў®¤­л© ®в ­ҐЈ® Є« бб. ’®Ј¤  ва ­б«пв®а
ўЁ¤Ёв, зв® Є« бб ®ЎкҐЄв , ­  Є®в®ал© ­ бв஥­ гЄ § вҐ«м p, ¤Ґ©б⢨⥫쭮
Ё¬ҐҐв дг­ЄжЁо rotate(),   дг­ЄжЁп Ё¬ҐҐв Ї а ¬Ґва вЁЇ  int. ‡­ зЁв,
p->rotate(45) Є®а४⭮Ґ ўла ¦Ґ­ЁҐ.

Џ®бЄ®«мЄг shape::rotate() Ўл«  ®ЇЁб ­  Є Є ўЁавг «м­ п дг­ЄжЁп, ­г¦­®
ЁбЇ®«м§®ў вм ¬Ґе ­Ё§¬ ўл§®ў  ўЁавг «м­®© дг­ЄжЁЁ. —в®Ўл г§­ вм, Є Єго
Ё¬Ґ­­® Ё§ дг­ЄжЁ© rotate б«Ґ¤гҐв ўл§ў вм, ­г¦­® ¤® ўл§®ў  Ї®«гзЁвм Ё§
®ЎкҐЄв  ­ҐЄ®в®аго б«г¦ҐЎ­го Ё­д®а¬ жЁо, Є®в®а п Ўл«  Ї®¬ҐйҐ­  вг¤  ЇаЁ ҐЈ®
ᮧ¤ ­ЁЁ. Љ Є в®«мЄ® гбв ­®ў«Ґ­®, Є Єго дг­ЄжЁо ­ ¤® ўл§ў вм, ¤®ЇгбвЁ¬
circle::rotate, Їа®Ёб室Ёв ҐҐ ўл§®ў б 㦥 гЇ®¬Ё­ ўиЁ¬бп Є®­ва®«Ґ¬ вЁЇ .
ЋЎлз­® ў Є зҐб⢥ б«г¦ҐЎ­®© Ё­д®а¬ жЁЁ ЁбЇ®«м§гҐвбп в Ў«Ёж   ¤аҐб®ў
дг­ЄжЁ©,   ва ­б«пв®а ЇаҐ®Ўа §гҐв Ё¬п rotate ў Ё­¤ҐЄб нв®© в Ў«Ёжл. ‘
гзҐв®¬ нв®© в Ў«Ёжл ®ЎкҐЄв вЁЇ  shape ¬®¦­® ЇаҐ¤бв ўЁвм в Є:


center
vtbl:
color &X::draw
&Y::rotate
...
...

”г­ЄжЁЁ Ё§ в Ў«Ёжл ўЁавг «м­ле дг­ЄжЁ© vtbl Ї®§ў®«пов Їа ўЁ«м­®
а Ў®в вм б ®ЎкҐЄв®¬ ¤ ¦Ґ ў вҐе б«гз пе, Є®Ј¤  ў ўл§лў о饩 дг­ЄжЁЁ
­ҐЁ§ўҐбв­л ­Ё в Ў«Ёж  vtbl, ­Ё а бЇ®«®¦Ґ­ЁҐ ¤ ­­ле ў з бвЁ ®ЎкҐЄв ,
®Ў®§­ зҐ­­®© ... . ‡¤Ґбм Є Є X Ё Y ®Ў®§­ зҐ­л Ё¬Ґ­  Є« бб®ў, ў Є®в®алҐ
ўе®¤пв ўл§лў Ґ¬лҐ дг­ЄжЁЁ. „«п ®ЎкҐЄв  circle ®Ў  Ё¬Ґ­Ё X Ё Y Ґбвм circle.
‚맮ў ўЁавг «м­®© дг­ЄжЁЁ ¬®¦Ґв Ўлвм Ї® бгвЁ бв®«м ¦Ґ нд䥪⨢Ґ­, Є Є
ўл§®ў ®Ўлз­®© дг­ЄжЁЁ.


1.5.2 Џа®ўҐаЄ  вЁЇ 

ЌҐ®Ўе®¤Ё¬®бвм Є®­ва®«п вЁЇ  ЇаЁ ®Ўа йҐ­Ёпе Є ўЁавг «м­л¬ дг­ЄжЁп¬
¬®¦Ґв ®Є § вмбп ®ЇаҐ¤Ґ«Ґ­­л¬ ®Ја ­ЁзҐ­ЁҐ¬ ¤«п а §а Ў®взЁЄ®ў ЎЁЎ«Ё®вҐЄ.
Ќ ЇаЁ¬Ґа, е®а®и® Ўл ЇаҐ¤®бв ўЁвм Ї®«м§®ў вҐ«о Є« бб "б⥪ 祣®-гЈ®¤­®".
ЌҐЇ®б।б⢥­­® ў ‘++ н⮠ᤥ« вм ­Ґ«м§п. Ћ¤­ Є®, ЁбЇ®«м§гп и Ў«®­л вЁЇ  Ё
­ б«Ґ¤®ў ­ЁҐ, ¬®¦­® ЇаЁЎ«Ё§Ёвмбп Є в®© нд䥪⨢­®бвЁ Ё Їа®бв®вҐ
Їа®ҐЄвЁа®ў ­Ёп Ё ЁбЇ®«м§®ў ­Ёп ЎЁЎ«Ё®вҐЄ, Є®в®алҐ бў®©б⢥­­л п§лЄ ¬ б
¤Ё­ ¬ЁзҐбЄЁ¬ Є®­ва®«Ґ¬ вЁЇ®ў. Љ в ЄЁ¬ п§лЄ ¬ ®в­®бЁвбп, ­ ЇаЁ¬Ґа, п§лЄ
Smalltalk, ­  Є®в®а®¬ ¬®¦­® ®ЇЁб вм "б⥪ 祣®-гЈ®¤­®". ђ бᬮваЁ¬
®ЇаҐ¤Ґ«Ґ­ЁҐ б⥪  б Ї®¬®ймо и Ў«®­  вЁЇ :

template < class T > class stack
{
T * p;
int sz;
public:
stack ( int );
~stack ();

void push ( T );
T & pop ();
};

ЌҐ ®б« Ў«пп бв вЁзҐбЄ®Ј® Є®­ва®«п вЁЇ®ў, ¬®¦­® ЁбЇ®«м§®ў вм в Є®© б⥪
¤«п еа ­Ґ­Ёп гЄ § вҐ«Ґ© ­  ®ЎкҐЄвл вЁЇ  plane (б ¬®«Ґв):

stack < plane * > cs ( 200 );

void f ()
{
cs.push ( new Saab900 ); // ЋиЁЎЄ  ЇаЁ ва ­б«пжЁЁ :
// вॡгҐвбп plane*,   ЇҐаҐ¤ ­ car*
cs.push ( new Saab37B );
// ЇаҐЄа б­®: Saab 37B - ­  б ¬®¬
// ¤Ґ«Ґ б ¬®«Ґв, в.Ґ. вЁЇ  plane
cs.pop () -> takeoff ();
cs.pop () -> takeoff ();
}

…б«Ё бв вЁзҐбЄ®Ј® Є®­ва®«п вЁЇ®ў ­Ґв, ЇаЁўҐ¤Ґ­­ п ўлиҐ ®иЁЎЄ 
®Ў­ аг¦Ёвбп в®«мЄ® ЇаЁ ўлЇ®«­Ґ­ЁЁ Їа®Ја ¬¬л:

// ЇаЁ¬Ґа ¤Ё­ ¬ЁзҐбЄ®Ґ Є®­ва®«п вЁЇ 
// ў¬Ґбв® бв вЁзҐбЄ®Ј®; нв® ­Ґ ‘++
Stack s; // б⥪ ¬®¦Ґв еа ­Ёвм гЄ § вҐ«Ё ­  ®ЎкҐЄвл
// Їа®Ё§ў®«м­®Ј® вЁЇ 
void f ()
{
s.push ( new Saab900 );
s.push ( new Saab37B );
s.pop () -> takeoff (); // ЇаҐЄа б­®: Saab 37B - б ¬®«Ґв
cs.pop () -> takeoff (); // ¤Ё­ ¬ЁзҐбЄ п ®иЁЎЄ :
// ¬ иЁ­  ­Ґ ¬®¦Ґв ў§«ҐвҐвм
}

„«п бЇ®б®Ў  ®ЇаҐ¤Ґ«Ґ­Ёп, ¤®ЇгбвЁ¬  «Ё ®ЇҐа жЁп ­ ¤ ®ЎкҐЄв®¬, ®Ўлз­®
вॡгҐвбп Ў®«миҐ ¤®Ї®«­ЁвҐ«м­ле а б室®ў, 祬 ¤«п ¬Ґе ­Ё§¬  ўл§®ў 
ўЁавг «м­ле дг­ЄжЁ© ў ‘++.

ђ ббзЁвлў п ­  бв вЁзҐбЄЁ© Є®­ва®«м вЁЇ®ў Ё ўл§®ў ўЁавг «м­ле дг­ЄжЁ©,
¬л ЇаЁе®¤Ё¬ Є Ё­®¬г бвЁ«о Їа®Ја ¬¬Ёа®ў ­Ёп, 祬 ­ ¤Ґпбм в®«мЄ® ­ 
¤Ё­ ¬ЁзҐбЄЁ© Є®­ва®«м вЁЇ®ў. Љ« бб ў ‘++ § ¤ Ґв бва®Ј® ®ЇаҐ¤Ґ«Ґ­­л©
Ё­вҐадҐ©б ¤«п ¬­®¦Ґбвў  ®ЎкҐЄв®ў нв®Ј® Ё «оЎ®Ј® Їа®Ё§ў®¤­®Ј® Є« бб , в®Ј¤ 
Є Є ў Smalltalk Є« бб § ¤ Ґв в®«мЄ® ¬Ё­Ё¬ «м­® ­Ґ®Ўе®¤Ё¬®Ґ зЁб«® ®ЇҐа жЁ©,
Ё Ї®«м§®ў вҐ«м ўЇа ўҐ ЇаЁ¬Ґ­пвм ­Ґ§ ¤ ­­лҐ ў Є« бᥠ®ЇҐа жЁЁ. €­л¬Ё
б«®ў ¬Ё, Є« бб ў ‘++ ᮤҐа¦Ёв в®з­®Ґ ®ЇЁб ­ЁҐ ®ЇҐа жЁ©, Ё Ї®«м§®ў вҐ«о
Ј а ­вЁагҐвбп, зв® в®«мЄ® нвЁ ®ЇҐа жЁЁ ва ­б«пв®а б®звҐв ¤®ЇгбвЁ¬л¬Ё.


1.5.3 Њ­®¦Ґб⢥­­®Ґ ­ б«Ґ¤®ў ­ЁҐ

…б«Ё Є« бб A пў«пҐвбп Ў §®ўл¬ Є« бᮬ ¤«п B, в® B ­ б«Ґ¤гҐв  ваЁЎгвл
A. в.Ґ. B ᮤҐа¦Ёв A Ї«об ҐйҐ зв®-в®. ‘ гзҐв®¬ нв®Ј® бв ­®ўЁвбп ®зҐўЁ¤­®,
зв® е®а®и®, Є®Ј¤  Є« бб B ¬®¦Ґв ­ б«Ґ¤®ў вм Ё§ ¤ўге Ў §®ўле Є« бб®ў A1 Ё
A2. ќв® ­ §лў Ґвбп ¬­®¦Ґб⢥­­л¬ ­ б«Ґ¤®ў ­ЁҐ¬.

ЏаЁўҐ¤Ґ¬ ­ҐЄЁ© вЁЇЁз­л© ЇаЁ¬Ґа ¬­®¦Ґб⢥­­®Ј® ­ б«Ґ¤®ў ­Ёп. Џгбвм Ґбвм
¤ў  ЎЁЎ«Ё®вҐз­ле Є« бб  displayed Ё task. ЏҐаўл© ЇаҐ¤бв ў«пҐв § ¤ зЁ,
Ё­д®а¬ жЁп ® Є®в®але ¬®¦Ґв ўл¤ ў вмбп ­  нЄа ­ б Ї®¬®ймо ­ҐЄ®в®а®Ј®
¬®­Ёв®а ,   ўв®а®© - § ¤ зЁ, ўлЇ®«­пҐ¬лҐ Ї®¤ гЇа ў«Ґ­ЁҐ¬ ­ҐЄ®в®а®Ј®
¤ЁбЇҐвзҐа . Џа®Ја ¬¬Ёбв ¬®¦Ґв ᮧ¤ ў вм б®Ўб⢥­­лҐ Є« ббл, ­ ЇаЁ¬Ґа,
в ЄЁҐ:

class my_displayed_task: public displayed, public task
{
// ⥪бв Ї®«м§®ў вҐ«п
};

class my_task: public task {
// нв  § ¤ з  ­Ґ Ё§®Ўа ¦ Ґвбп
// ­  нЄа ­Ґ, в.Є. ­Ґ ᮤҐа¦Ёв Є« бб displayed
// ⥪бв Ї®«м§®ў вҐ«п
};

class my_displayed: public displayed
{
//   нв® ­Ґ § ¤ з 
// в.Є. ­Ґ ᮤҐа¦Ёв Є« бб task
// ⥪бв Ї®«м§®ў вҐ«п
};

…б«Ё ­ б«Ґ¤®ў вмбп ¬®¦Ґв в®«мЄ® ®¤Ё­ Є« бб, в® Ї®«м§®ў вҐ«о ¤®бвгЇ­л
в®«мЄ® ¤ў  Ё§ ваҐе ЇаЁўҐ¤Ґ­­ле Є« бб®ў. ‚ १г«мв вҐ «ЁЎ® Ї®«гз Ґвбп
¤гЎ«Ёа®ў ­ЁҐ з б⥩ Їа®Ја ¬¬л, «ЁЎ® вҐапҐвбп ЈЁЎЄ®бвм,  , Є Є Їа ўЁ«®,
Їа®Ёб室Ёв Ё в®, Ё ¤агЈ®Ґ. ЏаЁўҐ¤Ґ­­л© ЇаЁ¬Ґа Їа®е®¤Ёв ў ‘++ ЎҐ§® ўбпЄЁе
¤®Ї®«­ЁвҐ«м­ле а б室®ў ўаҐ¬Ґ­Ё Ё Ї ¬пвЁ Ї® ба ў­Ґ­Ёо б Їа®Ја ¬¬ ¬Ё, ў
Є®в®але ­ б«Ґ¤гҐвбп ­Ґ Ў®«ҐҐ ®¤­®Ј® Є« бб . ‘в вЁзҐбЄЁ© Є®­ва®«м вЁЇ®ў ®в
нв®Ј® ⮦Ґ ­Ґ бва ¤ Ґв.

‚ᥠ­Ґ®¤­®§­ з­®бвЁ ўлпў«повбп ­  бв ¤ЁЁ ва ­б«пжЁЁ:

class task
{
public:
void trace ();
// ...
};

class displayed
{
public:
void trace ();
// ...
};

class my_displayed_task:public displayed, public task
{
// ў н⮬ Є« бᥠtrace () ­Ґ ®ЇаҐ¤Ґ«пҐвбп
};

void g ( my_displayed_task * p )
{
p -> trace (); // ®иЁЎЄ : ­Ґ®¤­®§­ з­®бвм
}

‚ н⮬ ЇаЁ¬ҐаҐ ўЁ¤­л ®в«ЁзЁп ‘++ ®в ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­ле ¤Ё «ҐЄв®ў
п§лЄ  ‹ЁбЇ, ў Є®в®але Ґбвм ¬­®¦Ґб⢥­­®Ґ ­ б«Ґ¤®ў ­ЁҐ. ‚ нвЁе ¤Ё «ҐЄв е
­Ґ®¤­®§­ з­®бвм а §аҐи Ґвбп в Є: Ё«Ё бзЁв Ґвбп бгйҐб⢥­­л¬ Ї®а冷Є
®ЇЁб ­Ёп, Ё«Ё бзЁв овбп Ё¤Ґ­вЁз­л¬Ё ®ЎкҐЄвл б ®¤­Ё¬ Ё ⥬ ¦Ґ Ё¬Ґ­Ґ¬ ў
а §­ле Ў §®ўле Є« бб е, Ё«Ё ЁбЇ®«м§говбп Є®¬ЎЁ­Ёа®ў ­­лҐ бЇ®б®Ўл, Є®Ј¤ 
б®ўЇ ¤Ґ­ЁҐ ®ЎкҐЄв®ў ¤®«п Ў §®ўле Є« бб®ў б®зҐв Ґвбп б Ў®«ҐҐ б«®¦­л¬
бЇ®б®Ў®¬ ¤«п Їа®Ё§ў®¤­ле Є« бб®ў. ‚ ‘++ ­Ґ®¤­®§­ з­®бвм, Є Є Їа ўЁ«®,
а §аҐи Ґвбп ўўҐ¤Ґ­ЁҐ¬ ҐйҐ ®¤­®© дг­ЄжЁЁ:

class my_displayed_task:public displayed, public task
{
// ...
public:
void trace ()
{
// ⥪бв Ї®«м§®ў вҐ«п
displayed::trace (); // ўл§®ў trace () Ё§ displayed
task::trace (); // ўл§®ў trace () Ё§ task
}
// ...
};

void g ( my_displayed_task * p )
{
p -> trace (); // ⥯Ґам ­®а¬ «м­®
}


1.5.4 €­Є Їбг«пжЁп

Џгбвм з«Ґ­г Є« бб  (­Ґў ¦­® дг­ЄжЁЁ-з«Ґ­г Ё«Ё з«Ґ­г, ЇаҐ¤бв ў«по饬г
¤ ­­лҐ) вॡгҐвбп § йЁв  ®в "­Ґб ­ЄжЁ®­Ёа®ў ­­®Ј® ¤®бвгЇ ". Љ Є а §г¬­®
®Ја ­ЁзЁвм ¬­®¦Ґбвў® дг­ЄжЁ©, Є®в®ал¬ в Є®© з«Ґ­ Ўг¤Ґв ¤®бвгЇҐ­? ЋзҐўЁ¤­л©
®вўҐв ¤«п п§лЄ®ў, Ї®¤¤Ґа¦Ёў ойЁе ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ
Їа®Ја ¬¬Ёа®ў ­ЁҐ, в Є®ў: ¤®бвгЇ Ё¬Ґо⠢ᥠ®ЇҐа жЁЁ, Є®в®алҐ ®ЇаҐ¤Ґ«Ґ­л ¤«п
нв®Ј® ®ЎкҐЄв , Ё­л¬Ё б«®ў ¬Ё, ўбҐ дг­ЄжЁЁ-з«Ґ­л. Ќ ЇаЁ¬Ґа:

class window
{
// ...
protected:
Rectangle inside;
// ...
};

class dumb_terminal : public window
{
// ...
public:
void prompt ();
// ...
};

‡¤Ґбм ў Ў §®ў®¬ Є« бᥠwindow з«Ґ­ inside вЁЇ  Rectangle ®ЇЁблў Ґвбп
Є Є § йЁйҐ­­л© (protected), ­® дг­ЄжЁЁ-з«Ґ­л Їа®Ё§ў®¤­ле Є« бб®ў,
­ ЇаЁ¬Ґа, dumb_terminal::prompt(), ¬®Јгв ®Ўа вЁвмбп Є ­Ґ¬г Ё ўлпб­Ёвм, б
Є Є®Ј® ўЁ¤  ®Є­®¬ ®­Ё а Ў®в ов. „«п ўбҐе ¤агЈЁе дг­ЄжЁ© з«Ґ­
window::inside ­Ґ¤®бвгЇҐ­.

‚ в Є®¬ Ї®¤е®¤Ґ б®зҐв Ґвбп ўлб®Є п б⥯Ґ­м § йЁйҐ­­®бвЁ
(¤Ґ©б⢨⥫쭮, ўап¤ «Ё ўл "б«гз ©­®" ®ЇаҐ¤Ґ«ЁвҐ Їа®Ё§ў®¤­л© Є« бб) б
ЈЁЎЄ®бвмо, ­Ґ®Ўе®¤Ё¬®© ¤«п Їа®Ја ¬¬, Є®в®алҐ б®§¤ ов Є« ббл Ё ЁбЇ®«м§гов
Ёе ЁҐа аеЁо (¤Ґ©б⢨⥫쭮, "¤«п ᥡп" ўбҐЈ¤  ¬®¦­® ў Їа®Ё§ў®¤­ле Є« бб е
ЇаҐ¤гᬮваҐвм ¤®бвгЇ Є § йЁйҐ­­л¬ з«Ґ­ ¬).

ЌҐ®зҐўЁ¤­®Ґ б«Ґ¤бвўЁҐ Ё§ нв®Ј®: ­Ґ«м§п б®бв ўЁвм Ї®«­л© Ё
®Є®­з вҐ«м­л© бЇЁб®Є ўбҐе дг­ЄжЁ©, Є®в®ал¬ Ўг¤Ґв ¤®бвгЇҐ­ § йЁйҐ­­л© з«Ґ­,
Ї®бЄ®«мЄг ўбҐЈ¤  ¬®¦­® ¤®Ў ўЁвм ҐйҐ ®¤­г, ®ЇаҐ¤Ґ«Ёў ҐҐ Є Є дг­ЄжЁо-з«Ґ­ ў
­®ў®¬ Їа®Ё§ў®¤­®¬ Є« ббҐ. „«п ¬Ґв®¤   Ўбва ЄжЁЁ ¤ ­­ле в Є®© Ї®¤е®¤ з бв®
Ўлў Ґв ¬ «® ЇаЁҐ¬«Ґ¬л¬. …б«Ё п§лЄ ®аЁҐ­вЁагҐвбп ­  ¬Ґв®¤  Ўбва ЄжЁЁ
¤ ­­ле, в® ®зҐўЁ¤­®Ґ ¤«п ­ҐЈ® аҐиҐ­ЁҐ - нв® вॡ®ў ­ЁҐ гЄ §лў вм ў
®ЇЁб ­ЁЁ Є« бб  бЇЁб®Є ўбҐе дг­ЄжЁ©, Є®в®ал¬ ­г¦Ґ­ ¤®бвгЇ Є з«Ґ­г. ‚ ‘++
¤«п нв®© 楫Ё ЁбЇ®«м§гҐвбп ®ЇЁб ­ЁҐ з бв­ле (private) з«Ґ­®ў. Ћ­®
ЁбЇ®«м§®ў «®бм Ё ў ЇаЁў®¤ЁўиЁебп ®ЇЁб ­Ёпе Є« бб®ў complex Ё shape.

‚ ¦­®бвм Ё­Є Їбг«пжЁЁ, в.Ґ. § Є«о祭Ёп з«Ґ­®ў ў § йЁв­го ®Ў®«®зЄг,
१Є® ў®§а бв Ґв б а®б⮬ а §¬Ґа®ў Їа®Ја ¬¬л Ё 㢥«ЁзЁў ойЁ¬бп а §Ўа®б®¬
®Ў« б⥩ ЇаЁ«®¦Ґ­Ёп. ‚ $$6.6 Ў®«ҐҐ Ї®¤а®Ў­® ®Ўб㦤 овбп ў®§¬®¦­®бвЁ п§лЄ 
Ї® Ё­Є Їбг«пжЁЁ.


1.6 ЏаҐ¤Ґ«л б®ўҐа襭бвў 

џ§лЄ ‘++ Їа®ҐЄвЁа®ў «бп Є Є "«гзиЁ© ‘", Ї®¤¤Ґа¦Ёў ойЁ©  Ўбва ЄжЁо
¤ ­­ле Ё ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ. ЏаЁ н⮬ ®­ ¤®«¦Ґ­
Ўлвм ЇаЁЈ®¤­л¬ ¤«п Ў®«миЁ­бвў  ®б­®ў­ле § ¤ з бЁб⥬­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп.

Ћб­®ў­ п ваг¤­®бвм ¤«п п§лЄ , Є®в®ал© б®§¤ ў «бп ў а бзҐвҐ ­  ¬Ґв®¤л
гЇапвлў ­Ёп ¤ ­­ле,  Ўбва ЄжЁЁ ¤ ­­ле Ё ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ј®
Їа®Ја ¬¬Ёа®ў ­Ёп, ў ⮬, зв® ¤«п в®Ј®, зв®Ўл Ўлвм п§лЄ®¬ ®ЎйҐЈ®
­ §­ зҐ­Ёп, ®­ ¤®«¦Ґ­:

- Ё¤вЁ ­  ва ¤ЁжЁ®­­ле ¬ иЁ­ е;

- б®бгйҐбвў®ў вм б ва ¤ЁжЁ®­­л¬Ё ®ЇҐа жЁ®­­л¬Ё бЁб⥬ ¬Ё Ё п§лЄ ¬Ё;

- б®ЇҐа­Ёз вм б ва ¤ЁжЁ®­­л¬Ё п§лЄ ¬Ё Їа®Ја ¬¬Ёа®ў ­Ёп ў нд䥪⨢­®бвЁ
ўлЇ®«­Ґ­Ёп Їа®Ја ¬¬л;

- Ўлвм ЇаЁЈ®¤­л¬ ў® ўбҐе ®б­®ў­ле ®Ў« бвпе ЇаЁ«®¦Ґ­Ёп.

ќв® §­ зЁв, зв® ¤®«¦­л Ўлвм ў®§¬®¦­®бвЁ ¤«п нд䥪⨢­ле зЁб«®ўле
®ЇҐа жЁ© ( аЁд¬ҐвЁЄ  б Ї« ў о饩 в®зЄ®© ЎҐ§ ®б®Ўле ­ Є« ¤­ле а б室®ў,
Ё­ зҐ Ї®«м§®ў вҐ«м ЇаҐ¤Ї®звҐв ”®ава ­) Ё б।бвў  в Є®Ј® ¤®бвгЇ  Є Ї ¬пвЁ,
Є®в®ал© Ї®§ў®«Ёв ЇЁб вм ­  н⮬ п§лЄҐ ¤а ©ўҐал гбва®©бвў. Ља®¬Ґ в®Ј®, ­ ¤®
㬥вм ЇЁб вм ўл§®ўл дг­ЄжЁ© ў ¤®бв в®з­® ­ҐЇаЁўлз­®© § ЇЁбЁ, ЇаЁ­пв®© ¤«п
®Ўа йҐ­Ё© ў ва ¤ЁжЁ®­­ле ®ЇҐа жЁ®­­ле бЁб⥬ е. Ќ Є®­Ґж, ¤®«¦­  Ўлвм
ў®§¬®¦­®бвм Ё§ п§лЄ , Ї®¤¤Ґа¦Ёў о饣® ®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ
Їа®Ја ¬¬Ёа®ў ­ЁҐ, ўл§лў вм дг­ЄжЁЁ, ­ ЇЁб ­­лҐ ­  ¤агЈЁе п§лЄ е,   Ё§
¤агЈЁе п§лЄ®ў ўл§лў вм дг­ЄжЁо ­  н⮬ п§лЄҐ, Ї®¤¤Ґа¦Ёў о饬
®ЎкҐЄв­®-®аЁҐ­вЁа®ў ­­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ.

„ «ҐҐ, ­Ґ«м§п а ббзЁвлў вм ­  иЁа®Є®Ґ ЁбЇ®«м§®ў ­ЁҐ ЁбЄ®¬®Ј® п§лЄ 
Їа®Ја ¬¬Ёа®ў ­Ёп Є Є п§лЄ  ®ЎйҐЈ® ­ §­ зҐ­Ёп, Ґб«Ё ॠ«Ё§ жЁп ҐЈ® 楫ЁЄ®¬
Ї®« Ј Ґвбп ­  ў®§¬®¦­®бвЁ, Є®в®алҐ ®вбгвбвўгов ў ¬ иЁ­ е б ва ¤ЁжЁ®­­®©
 аеЁвҐЄвга®©.

…б«Ё ­Ґ ўў®¤Ёвм ў п§лЄ ў®§¬®¦­®бвЁ ­Ё§Є®Ј® га®ў­п, в® ЇаЁ¤Ґвбп ¤«п
®б­®ў­ле § ¤ з Ў®«миЁ­бвў  ®Ў« б⥩ ЇаЁ«®¦Ґ­Ёп ЁбЇ®«м§®ў вм ­ҐЄ®в®алҐ
п§лЄЁ ­Ё§Є®Ј® га®ў­п, ­ ЇаЁ¬Ґа ‘ Ё«Ё  бᥬЎ«Ґа. Ќ® ‘++ Їа®ҐЄвЁа®ў «бп б
а бзҐв®¬, зв® ў ­Ґ¬ ¬®¦­® ᤥ« вм ўбҐ, зв® ¤®ЇгбвЁ¬® ­  ‘, ЇаЁзҐ¬ ЎҐ§
㢥«ЁзҐ­Ёп ўаҐ¬Ґ­Ё ўлЇ®«­Ґ­Ёп. ‚®®ЎйҐ, ‘++ Їа®ҐЄвЁа®ў «бп, Ёбе®¤п Ё§
ЇаЁ­жЁЇ , зв® ­Ґ ¤®«¦­® ў®§­ЁЄ вм ­ЁЄ ЄЁе ¤®Ї®«­ЁвҐ«м­ле § ва в ўаҐ¬Ґ­Ё Ё
Ї ¬пвЁ, Ґб«Ё в®«мЄ® нв®Ј® пў­® ­Ґ Ї®¦Ґ« Ґв б ¬ Їа®Ја ¬¬Ёбв.

џ§лЄ Їа®ҐЄвЁа®ў «бп ў а бзҐвҐ ­  ᮢ६Ґ­­лҐ ¬Ґв®¤л ва ­б«пжЁЁ,
Є®в®алҐ ®ЎҐбЇҐзЁў ов Їа®ўҐаЄг б®Ј« б®ў ­­®бвЁ Їа®Ја ¬¬л, ҐҐ нд䥪⨢­®бвм
Ё Є®¬Ї Єв­®бвм ЇаҐ¤бв ў«Ґ­Ёп. Ћб­®ў­л¬ б।бвў®¬ Ў®амЎл б® б«®¦­®бвмо
Їа®Ја ¬¬ ўЁ¤Ёвбп, ЇаҐ¦¤Ґ ўбҐЈ®, бва®ЈЁ© Є®­ва®«м вЁЇ®ў Ё Ё­Є Їбг«пжЁп.
Ћб®ЎҐ­­® нв® Є б Ґвбп Ў®«миЁе Їа®Ја ¬¬, ᮧ¤ ў Ґ¬ле ¬­®ЈЁ¬Ё «о¤м¬Ё.
Џ®«м§®ў вҐ«м ¬®¦Ґв ­Ґ пў«пвмбп ®¤­Ё¬ Ё§ ᮧ¤ вҐ«Ґ© в ЄЁе Їа®Ја ¬¬, Ё ¬®¦Ґв
ў®®ЎйҐ ­Ґ Ўлвм Їа®Ја ¬¬Ёб⮬. Џ®бЄ®«мЄг ­ЁЄ Єго ­ бв®пйго Їа®Ја ¬¬г
­Ґ«м§п ­ ЇЁб вм ЎҐ§ Ї®¤¤Ґа¦ЄЁ ЎЁЎ«Ё®вҐЄ, ᮧ¤ ў Ґ¬ле ¤агЈЁ¬Ё
Їа®Ја ¬¬Ёбв ¬Ё, Ї®б«Ґ¤­ҐҐ § ¬Ґз ­ЁҐ ¬®¦­® ®в­ҐбвЁ Їа ЄвЁзҐбЄЁ Є® ўбҐ¬
Їа®Ја ¬¬ ¬.

‘++ Їа®ҐЄвЁа®ў «бп ¤«п Ї®¤¤Ґа¦ЄЁ в®Ј® ЇаЁ­жЁЇ , зв® ўбпЄ п Їа®Ја ¬¬ 
Ґбвм ¬®¤Ґ«м ­ҐЄ®в®але бгйҐбвўгойЁе ў ॠ«м­®бвЁ Ї®­пвЁ©,   Є« бб пў«пҐвбп
Є®­ЄаҐв­л¬ ЇаҐ¤бв ў«Ґ­ЁҐ¬ Ї®­пвЁп, ў§пв®Ј® Ё§ ®Ў« бвЁ ЇаЁ«®¦Ґ­Ёп ($$12.2).
Џ®н⮬㠪« ббл Їа®­Ё§лў ов ўбо Їа®Ја ¬¬г ­  ‘++, Ё ­ « Ј овбп ¦ҐбвЄЁҐ
вॡ®ў ­Ёп ­  ЈЁЎЄ®бвм Ї®­пвЁп Є« бб , Є®¬Ї Єв­®бвм ®ЎкҐЄв®ў Є« бб  Ё
нд䥪⨢­®бвм Ёе ЁбЇ®«м§®ў ­Ёп. …б«Ё а Ў®в вм б Є« бб ¬Ё Ўг¤Ґв ­Ґг¤®Ў­®
Ё«Ё б«ЁиЄ®¬ ­ Є« ¤­®, в® ®­Ё Їа®бв® ­Ґ Ўг¤гв ЁбЇ®«м§®ў вмбп, Ё Їа®Ја ¬¬л
ўлதпвбп ў Їа®Ја ¬¬л ­  "«гз襬 ‘". ‡­ зЁв Ї®«м§®ў вҐ«м ­Ґ б㬥Ґв
­ б« ¤Ёвмбп ⥬Ё ў®§¬®¦­®бвп¬Ё, а ¤Ё Є®в®але, б®Ўб⢥­­®, Ё ᮧ¤ ў «бп
п§лЄ.
Соседние файлы в папке Язык прогпаммирования C++