Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:CC++ / СС++ - сборник литературы / Язык прогпаммирования C++ / CHAP001
.TXTЉђЂ’Љ€‰ ЋЃ‡Ћђ ‘++
"Ќ 祬 б в®Ј®, зв® ў§¤ҐаҐ¬
ўбҐе нвЁе § Є®ЁЄ®ў, п§лЄ®ўҐ¤®ў".
("Љ®а®«м ѓҐаЁе 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++