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

пРЙУБОЙС. уРТБЧПЮОПЕ ТХЛПЧПДУФЧП РП C++ TH.arial { font-family: Arial, Serif;} P.topic { font-family: sans-serif;} A.plain { text-decoration: none;} A.topic01 { color: #006890; font-family: sans-serif; text-decoration: none;} A.topic02 { color: #099771; font-family: sans-serif; text-decoration: none;} A.topic03 { color: #719709; font-family: sans-serif; text-decoration: none;} A.topic04 { color: #98650A; font-family: sans-serif; text-decoration: none;} A.topic05 { color: #98340A; font-family: sans-serif; text-decoration: none;} A.topic06 { color: #099607; font-family: sans-serif; text-decoration: none;} A.topic07 { color: #9E1215; font-family: sans-serif; text-decoration: none;} A.topic08 { color: #970941; font-family: sans-serif; text-decoration: none;} A.topic09 { color: #950995; font-family: sans-serif; text-decoration: none;} A.topic010 { color: #390A98; font-family: sans-serif; text-decoration: none;} H1 { font-family: sans-serif;} H2 { font-family: sans-serif;} H3 { font-family: sans-serif;} H4 { font-family: sans-serif;} H5 { font-family: sans-serif;} H6 { font-family: sans-serif;} уЕТЧЕТ РПДДЕТЦЙЧБЕФУС

гЕОФТПН йОЖПТНБГЙПООЩИ фЕИОПМПЗЙК

(095) 932-9212, 932-9213, 939-0783

E-mail: info@citforum.ru уЕТЧЕТ УПДЕТЦЙФ НПТЕ(!) БОБМЙФЙЮЕУЛПК ЙОЖПТНБГЙЙ CIT Forum CD-ROM 8. пРЙУБОЙС пРЙУБОЙС ЙУРПМШЪХАФУС ДМС ПРТЕДЕМЕОЙС ЙОФЕТРТЕФБГЙЙ, ДБЧБЕНПК ЛБЦДПНХ ЙДЕОФЙЖЙЛБФПТХ; ПОЙ ОЕ ПВСЪБФЕМШОП ТЕЪЕТЧЙТХАФ РБНСФШ, УЧСЪБООХА У ЙДЕОФЙЖЙЛБФПТПН. пРЙУБОЙС ЙНЕАФ ЧЙД: ПРЙУБОЙЕ: УРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС opt УРЙУПЛ_ПРЙУБФЕМЕК opt ; ПРЙУБОЙЕ_ЙНЕОЙ asm_ПРЙУБОЙЕ пРЙУБФЕМЙ Ч УРЙУЛЕ_ПРЙУБФЕМЕК УПДЕТЦБФ ЙДЕОФЙЖЙЛБФПТЩ, РПДМЕЦБЭЙЕ ПРЙУБОЙА. уРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС НПЗХФ ВЩФШ ПРХЭЕОЩ ФПМШЛП Ч ПРТЕДЕМЕОЙСИ ЧОЕЫОЙИ ЖХОЛГЙК (#10) ЙМЙ Ч ПРЙУБОЙСИ ЧОЕЫОЙИ ЖХОЛГЙК. уРЙУПЛ ПРЙУБФЕМЕК НПЦЕФ ВЩФШ РХУФЩН ФПМШЛП РТЙ ПРЙУБОЙЙ ЛМБУУБ (#8.5) ЙМЙ РЕТЕЮЙУМЕОЙС (#8.10), ФП ЕУФШ, ЛПЗДБ УРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС - ЬФП class_УРЕГЙЖЙЛБФПТ ЙМЙ enum_УРЕГЙЖЙЛБФПТ. пРЙУБОЙС ЙНЕО ПРЙУЩЧБАФУС Ч #8.8; ПРЙУБОЙС asm ПРЙУБОЩ Ч #8.11. УРЕГЙЖЙЛБФПТ_ПРЙУБОЙС: sc_УРЕГЙЖЙЛБФПТ УРЕГЙЖЙЛБФПТ_ФЙРБ ЖОЛ_УРЕГЙЖЙЛБФПТ friend typedef УРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС: УРЕГЙЖЙЛБФПТ_ПРЙУБОЙС УРЕГЙЖЙЛБФПТ_ПРЙУБОЙС opt уРЙУПЛ ДПМЦЕО ВЩФШ ЧОХФТЕООЕ ОЕРТПФЙЧПТЕЮЙЧ Ч ПРЙУЩЧБЕНПН ОЙЦЕ УНЩУМЕ. 8.1 уРЕГЙЖЙЛБФПТЩ ЛМБУУБ РБНСФЙ уРЕГЙЖЙЛБФПТЩ "ЛМБУУБ РБНСФЙ" (sc-УРЕГЙЖЙЛБФПТ) ЬФП: sc-УРЕГЙЖЙЛБФПТ: auto static extern register пРЙУБОЙС, ЙУРПМШЪХАЭЙЕ УРЕГЙЖЙЛБФПТЩ auto, static Й register ФБЛЦЕ УМХЦБФ ПРТЕДЕМЕОЙСНЙ ФЕН, ЮФП ПОЙ ЧЩЪЩЧБАФ ТЕЪЕТЧЙТПЧБОЙЕ УППФЧЕФУФЧХАЭЕЗП ПВЯЕНБ РБНСФЙ. еУМЙ ПРЙУБОЙЕ extern ОЕ СЧМСЕФУС ПРТЕДЕМЕОЙЕН (#4.2), ФП ЗДЕ-ФП ЕЭЕ ДПМЦОП ВЩФШ ПРТЕДЕМЕОЙЕ ДМС ДБООЩИ ЙДЕОФЙЖЙЛБФПТПЧ. пРЙУБОЙЕ register МХЮЫЕ ЧУЕЗП РТЕДУФБЧЙФШ ЛБЛ ПРЙУБОЙЕ auto (БЧФПНБФЙЮЕУЛЙК) У РПДУЛБЪЛПК ЛПНРЙМСФПТХ, ЮФП ПРЙУБООЩЕ РЕТЕНЕООЩЕ ХУЙМЕООП ЙУРПМШЪХАФУС. рПДУЛБЪЛБ НПЦЕФ ВЩФШ РТПЙЗОПТЙТПЧБОБ. л ОЙН ОЕ НПЦЕФ РТЙНЕОСФШУС ПРЕТБГЙС РПМХЮЕОЙС БДТЕУБ &. уРЕГЙЖЙЛБФПТЩ auto ЙМЙ register НПЗХФ РТЙНЕОСФШУС ФПМШЛП Л ЙНЕОБН, ПРЙУБООЩН Ч ВМПЛЕ, ЙМЙ Л ЖПТНБМШОЩН РБТБНЕФТБН. чОХФТЙ ВМПЛБ ОЕ НПЦЕФ ВЩФШ ПРЙУБОЙК ОЙ УФБФЙЮЕУЛЙИ ЖХОЛГЙК, ОЙ УФБФЙЮЕУЛЙИ ЖПТНБМШОЩИ РБТБНЕФТПЧ. ч ПРЙУБОЙЙ НПЦЕФ ВЩФШ ЪБДБО НБЛУЙНХН ПДЙО sc_УРЕГЙЖЙЛБФПТ. еУМЙ Ч ПРЙУБОЙЙ ПФУХФУЧХЕФ sc_УРЕГЙЖЙЛБФПТ, ФП ЛМБУУ РБНСФЙ РТЙОЙНБЕФУС БЧФПНБФЙЮЕУЛЙН ЧОХФТЙ ЖХОЛГЙЙ Й УФБФЙЮЕУЛЙН ЧОЕ. йУЛМАЮЕОЙЕ: ЖХОЛГЙЙ ОЕ НПЗХФ ВЩФШ БЧФПНБФЙЮЕУЛЙНЙ. уРЕГЙЖЙЛБФПТЩ static Й extern НПЗХФ ЙУРПМШЪПЧБФШУС ФПМШЛП ДМС ЙНЕО ПВЯЕЛФПЧ Й ЖХОЛГЙК. оЕЛПФПТЩЕ УРЕГЙЖЙЛБФПТЩ НПЗХФ ЙУРПМШЪПЧБФШУС ФПМШЛП Ч ПРЙУБОЙСИ ЖХОЛГЙК: ЖОЛ-УРЕГЙЖЙЛБФПТ: overload inline virtual уРЕГЙЖЙЛБФПТ РЕТЕЗТХЪЛЙ overload ДЕМБЕФ ЧПЪНПЦОЩН ЙУРПМШЪПЧБОЙЕ ПДОПЗП ЙНЕОЙ ДМС ПВПЪОБЮЕОЙС ОЕУЛПМШЛЙИ ЖХОЛГЙК; УН. #8.9. уРЕГЙЖЙЛБФПТ inline СЧМСЕФУС ФПМШЛП РПДУЛБЪЛПК ЛПНРЙМСФПТХ, ОЕ ЧМЙСЕФ ОБ УНЩУМ РТПЗТБННЩ Й НПЦЕФ ВЩФШ РТПЙЗОПТЙТПЧБО. пО ЙУРПМШЪХЕФУС, ЮФПВЩ ХЛБЪБФШ ОБ ФП, ЮФП РТЙ ЧЩЪПЧЕ ЖХОЛГЙЙ inline- РПДУФБОПЧЛБ ФЕМБ ЖХОЛГЙЙ РТЕДРПЮФЙФЕМШОЕЕ ПВЩЮОПК ТЕБМЙЪБГЙЙ ЧЩЪПЧБ ЖХОЛГЙЙ. жХОЛГЙС (#8.5.2 Й #8.5.10), ПРТЕДЕМЕООБС ЧОХФТЙ ПРЙУБОЙС ЛМБУУБ, СЧМСЕФУС inline РП ХНПМЮБОЙА. уРЕГЙЖЙЛБФПТ virtual НПЦЕФ ЙУРПМШЪПЧБФШУС ФПМШЛП Ч ПРЙУБОЙСИ ЮМЕОПЧ ЛМБУУБ; УН. #8.5.4. уРЕГЙЖЙЛБФПТ friend ЙУРПМШЪХЕФУС ДМС ПФНЕОЩ РТБЧЙМ УЛТЩФЙС ЙНЕОЙ ДМС ЮМЕОПЧ ЛМБУУБ Й НПЦЕФ ЙУРПМШЪПЧБФШУС ФПМШЛП ЧОХФТЙ ПРЙУБОЙК ЛМБУУПЧ; УН. #8.5.9. у РПНПЭША УРЕГЙЖЙЛБФПТБ typedef ЧЧПДЙФУС ЙНС ДМС ФЙРБ; УН. #8.8. 8.2 уРЕГЙЖЙЛБФПТЩ фЙРБ уРЕГЙЖЙЛБФПТБНЙ ФЙРПЧ (УРЕГЙЖЙЛБФПТ_ФЙРБ) СЧМСАФУС: УРЕГЙЖЙЛБФПТ_ФЙРБ: РТПУФПЕ_ЙНС_ФЙРБ class_УРЕГЙЖЙЛБФПТ enum-УРЕГЙЖЙЛБФПТ УМПЦОЩК_УРЕГЙЖЙЛБФПТ_ФЙРБ const уМПЧП const НПЦОП ДПВБЧМСФШ Л МАВПНХ ДПРХУФЙНПНХ УРЕГЙЖЙЛБФПТХ_ФЙРБ. ч ПУФБМШОЩИ УМХЮБСИ Ч ПРЙУБОЙЙ НПЦЕФ ВЩФШ ДБОП ОЕ ВПМЕЕ ПДОПЗП УРЕГЙЖЙЛБФПТБ_ФЙРБ. пВЯЕЛФ ФЙРБ const ОЕ СЧМСЕФУС lvalue. еУМЙ Ч ПРЙУБОЙЙ ПРХЭЕО УРЕГЙЖЙЛБФПТ ФЙРБ, ПО РТЙОЙНБЕФУС int. РТПУФПЕ_ЙНС_ФЙРБ: char short int long unsigned float double const void уМПЧБ long, short Й unsigned НПЦОП ТБУУНБФТЙЧБФШ ЛБЛ РТЙМБЗБФЕМШОЩЕ. пОЙ НПЗХФ РТЙНЕОСФШУС Л ФЙРХ int; unsigned НПЦЕФ ФБЛЦЕ РТЙНЕОСФШУС Л ФЙРБН char, short Й long. уРЕГЙЖЙЛБФПТЩ ЛМБУУБ Й РЕТЕЮЙУМЕОЙС ПВУХЦДБАФУС Ч #8.5 Й #8.10 УППФЧЕФУФЧЕООП. УМПЦОЩК_УРЕГЙЖЙЛБФПТ_ФЙРБ: ЛМАЮ typedef-ЙНС ЛМАЮ ЙДЕОФЙЖЙЛБФПТ ЛМАЮ: class struct union enum уМПЦОЩК УРЕГЙЖЙЛБФПТ ФЙРБ НПЦОП ЙУРПМШЪПЧБФШ ДМС УУЩМЛЙ ОБ ЙНС ЛМБУУБ ЙМЙ РЕТЕЮЙУМЕОЙС ФБН, ЗДЕ ЙНС НПЦЕФ ВЩФШ УЛТЩФП МПЛБМШОЩН ЙНЕОЕН. оБРТЙНЕТ: class x { ... }; void f(int x) { class x a; // ... } еУМЙ ЙНС ЛМБУУБ ЙМЙ РЕТЕЮЙУМЕОЙС ТБОЕЕ ПРЙУБОП ОЕ ВЩМП, УМПЦОЩК_УРЕГЙЖЙЛБФПТ_ФЙРБ ТБВПФБЕФ ЛБЛ ПРЙУБОЙЕ_ЙНЕОЙ; УН. #8.8. 8.3 пРЙУБФЕМЙ уРЙУПЛ_ПРЙУБФЕМЕК, РПСЧМСАЭЙКУС Ч ПРЙУБОЙЙ, ЕУФШ ТБЪДЕМЕООБС ЪБРСФЩНЙ РПУМЕДПЧБФЕМШОПУФШ ПРЙУБФЕМЕК, ЛБЦДЩК ЙЪ ЛПФПТЩИ НПЦЕФ ЙНЕФШ ЙОЙГЙБМЙЪБФПТ. УРЙУПЛ_ПРЙУБФЕМЕК: ЙОЙГ_ПРЙУБФЕМШ ЙОЙГ_ПРЙУБФЕМШ , УРЙУПЛ_ПРЙУБФЕМЕК ЙОЙГ_ПРЙУБФЕМШ: ПРЙУБФЕМШ ЙОЙГЙБМЙЪБФПТ opt йОЙГЙБМЙЪБФПТЩ ПВУХЦДБАФУС Ч #8.6. уРЕГЙЖЙЛБФПТ Ч ПРЙУБОЙЙ ХЛБЪЩЧБЕФ ФЙР Й ЛМБУУ РБНСФЙ ПВЯЕЛФПЧ, Л ЛПФПТЩН ПФОПУСФУС ПРЙУБФЕМЙ. пРЙУБФЕМЙ ЙНЕАФ УЙОФБЛУЙУ: ПРЙУБФЕМШ: ПР_ЙНС ( ПРЙУБФЕМШ ) * const opt ПРЙУБФЕМШ & const opt ПРЙУБФЕМШ ПРЙУБФЕМШ ( УРЙУПЛ_ПРЙУБОЙК_РБТБНЕФТПЧ ) ПРЙУБФЕМШ [ ЛПОУФБОФОПЕ_ЧЩТБЦЕОЙЕ opt ] ПР-ЙНС: РТПУФПЕ_ПР_ЙНС typedef-ЙНС :: РТПУФПЕ_ПР_ЙНС РТПУФПЕ_ПР_ЙНС: ЙДЕОФЙЖЙЛБФПТ typedef-ЙНС ~ typedef-ЙНС ЙНС_ЖХОЛГЙЙ_ПРЕТБГЙЙ ЙНС_ЖХОЛГЙЙ_РТЕПВТБЪПЧБОЙС зТХРРЙТПЧЛБ ФБ ЦЕ, ЮФП Й Ч ЧЩТБЦЕОЙСИ. 8.4 уНЩУМ ПРЙУБФЕМЕК лБЦДЩК ПРЙУБФЕМШ УЮЙФБЕФУС ХФЧЕТЦДЕОЙЕН ФПЗП, ЮФП ЕУМЙ Ч ЧЩТБЦЕОЙЙ ЧПЪОЙЛБЕФ ЛПОУФТХЛГЙС, ЙНЕАЭБС ФХ ЦЕ ЖПТНХ, ЮФП Й ПРЙУБФЕМШ, ФП ПОБ ДБЕФ ПВЯЕЛФ ХЛБЪБООПЗП ФЙРБ Й ЛМБУУБ РБНСФЙ. лБЦДЩК ПРЙУБФЕМШ УПДЕТЦЙФ ТПЧОП ПДОП ПР_ЙНС; ПОП ПРТЕДЕМСЕФ ПРЙУЩЧБЕНЩК ЙДЕОФЙЖЙЛБФПТ. ъБ ЙУЛМАЮЕОЙЕН ПРЙУБОЙК ОЕЛПФПТЩИ УРЕГЙБМШОЩИ ЖХОЛГЙК (УН. #8.5.2) , ПР_ЙНС ВХДЕФ РТПУФЩН ЙДЕОФЙЖЙЛБФПТПН. еУМЙ Ч ЛБЮЕУФЧЕ ПРЙУБФЕМС ЧПЪОЙЛБЕФ ОЙЮЕН ОЕ УОБВЦЕООЩК ЙДЕОФЙЖЙЛБФПТ, ФП ПО ЙНЕЕФ ФЙР, ХЛБЪБООЩК УРЕГЙЖЙЛБФПТПН, ЧПЪЗМБЧМСАЭЙН ПРЙУБОЙЕ. пРЙУБФЕМШ Ч УЛПВЛБИ ЬЛЧЙЧБМЕОФЕО ПРЙУБФЕМА ВЕЪ УЛПВПЛ, ОП УЧСЪЛХ УМПЦОЩИ ПРЙУБФЕМЕК УЛПВЛЙ НПЗХФ ЙЪНЕОСФШ. фЕРЕТШ РТЕДУФБЧЙН УЕВЕ ПРЙУБОЙЕ T D1 ЗДЕ T - УРЕГЙЖЙЛБФПТ ФЙРБ (ЛБЛ int Й Ф.Д.), Б D1 - ПРЙУБФЕМШ. дПРХУФЙН, ЮФП ЬФП ПРЙУБОЙЕ ЪБУФБЧМСЕФ ЙДЕОФЙЖЙЛБФПТ ЙНЕФШ ФЙР "... T", ЗДЕ "..." РХУФП, ЕУМЙ ЙДЕОФЙЖЙЛБФПТ D1 ЕУФШ РТПУФП ПВЩЮЩК ЙДЕОФЙЖЙЛБФПТ (ФБЛ ЮФП ФЙР x Ч "int x" ЕУФШ РТПУФП int). фПЗДБ, ЕУМЙ D1 ЙНЕЕФ ЧЙД *D ФП ФЙР УПДЕТЦБЭЕЗПУС ЙДЕОФЙЖЙЛБФПТБ ЕУФШ "... ХЛБЪБФЕМШ ОБ T." еУМЙ D1 ЙНЕЕФ ЧЙД * const D ФП ФЙР УПДЕТЦБЭЕЗПУС ЙДЕОФЙЖЙЛБФПТБ ЕУФШ "... ЛПОУФБОФОЩК ХЛБЪБФЕМШ ОБ T", ФП ЕУФШ, ФПЗП ЦЕ ФЙРБ, ЮФП Й *D, ОП ОЕ lvalue. еУМЙ D1 ЙНЕЕФ ЧЙД &D ЙМЙ & const D ФП ФЙР УПДЕТЦБЭЕЗПУС ЙДЕОФЙЖЙЛБФПТБ ЕУФШ "... УУЩМЛБ ОБ T." рПУЛПМШЛХ УУЩМЛБ РП ПРТЕДЕМЕОЙА ОЕ НПЦЕФ ВЩФШ lvalue, ЙУРПМШЪПЧБОЙЕ const ЙЪМЙЫОЕ. оЕЧПЪНПЦОП ЙНЕФШ УУЩМЛХ ОБ void (void&). еУМЙ D1 ЙНЕЕФ ЧЙД D (УРЙУПЛ_ПРЙУБОЙК_РБТБНЕФТПЧ) ФП УПДЕТЦБЭЙКУС ЙДЕОФЙЖЙЛБФПТ ЙНЕЕФ ФЙР "... ЖХОЛГЙС, РТЙОЙНБАЭБС РБТБНЕФТ ФЙРБ УРЙУПЛ_ПРЙУБОЙК_РБТБНЕФТПЧ Й ЧПЪЧТБЭБАЭБС T." УРЙУПЛ_ПРЙУБОЙК_РБТБНЕФТПЧ: УРЙУПЛ_ПРЙУБОЙК_РБТБН opt ... opt УРЙУПЛ_ПРЙУБОЙК_РБТБН: УРЙУПЛ_ПРЙУБОЙК_РБТБН , ПРЙУБОЙЕ_РБТБНЕФТБ ПРЙУБОЙЕ_РБТБНЕФТБ ПРЙУБОЙЕ_РБТБНЕФТБ: УРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС ПРЙУБФЕМШ УРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС ПРЙУБФЕМШ = ЧЩТБЦЕОЙЕ УРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС БВУФТБЛФ_ПРЙУБФЕМШ УРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС БВУФТБЛФ_ПРЙУБФЕМШ = ЧЩТБЦЕОЙЕ еУМЙ УРЙУПЛ_ПРЙУБОЙК_РБТБНЕФТПЧ ЪБЛБОЮЙЧБЕФУС НОПЗПФПЮЙЕН, ФП П ЮЙУМЕ РБТБНЕФТПЧ ЙЪЧЕУФОП МЙЫШ, ЮФП ПОП ТБЧОП ЙМЙ ВПМШЫЕ ЮЙУМБ УРЕГЙЖЙГЙТПЧБООЩИ ФЙРПЧ РБТБНЕФТПЧ; ЕУМЙ ПО РХУФ, ФП ЖХОЛГЙС ОЕ РПМХЮБЕФ ОЙ ПДОПЗП РБТБНЕФТБ. чУЕ ПРЙУБОЙС ДМС ЖХОЛГЙЙ ДПМЦОЩ УПЗМБУПЧЩЧБФШУС Й Ч ФЙРЕ ЧПЪЧТБЭБЕНПЗП ЪОБЮЕОЙС, Б ФБЛЦЕ Ч ЮЙУМЕ Й ФЙРЕ РБТБНЕФТПЧ. уРЙУПЛ_ПРЙУБОЙК_РБТБНЕФТПЧ ЙУРПМШЪХЕФУС ДМС РТПЧЕТЛЙ Й РТЕПВТБЪПЧБОЙС ЖБЛФЙЮЕУЛЙИ РБТБНЕФТПЧ Й ДМС ЛПОФТПМС РТЙУЧБЙЧБОЙС ХЛБЪБФЕМА ОБ ЖХОЛГЙА. еУМЙ Ч ПРЙУБОЙЙ РБТБНЕФТБ УРЕГЙЖЙГЙТПЧБОП ЧЩТБЦЕОЙЕ, ФП ЬФП ЧЩТБЦЕОЙЕ ЙУРПМШЪХЕФУС ЛБЛ РБТБНЕФТ РП ХНПМЮБОЙА. рБТБНЕФТЩ РП ХНПМЮБОЙА ВХДХФ ЙУРПМШЪПЧБФШУС Ч ЧЩЪПЧБИ, ЗДЕ ПРХЭЕОЩ УФПСЭЙЕ Ч ИЧПУФЕ РБТБНЕФТЩ. рБТБНЕФТ РП ХНПМЮБОЙА ОЕ НПЦЕФ РЕТЕПРТЕДЕМСФШУС ВПМЕЕ РПЪДОЙНЙ ПРЙУБОЙСНЙ. пДОБЛП, ПРЙУБОЙЕ НПЦЕФ ДПВБЧМСФШ РБТБНЕФТЩ РП ХНПМЮБОЙА, ОЕ ЪБДБООЩЕ Ч РТЕДЩДХЭЙИ ПРЙУБОЙСИ. йДЕОФЙЖЙЛБФПТ НПЦЕФ РП ЦЕМБОЙА ВЩФШ ЪБДБО ЛБЛ ЙНС РБТБНЕФТБ. еУМЙ ПО РТЙУХФУФЧХЕФ Ч ПРЙУБОЙЙ ЖХОЛГЙЙ, ЕЗП ЙУРПМШЪПЧБФШ ОЕМШЪС, РПУЛПМШЛХ ПО УТБЪХ ЧЩИПДЙФ ЙЪ ПВМБУФЙ ЧЙДЙНПУФЙ. еУМЙ ПО РТЙУХФУФЧХЕФ Ч ПРТЕДЕМЕОЙЙ ЖХОЛГЙЙ (#10), ФП ПО ЙНЕОХЕФ ЖБТНБМШОЩК РБТБНЕФТ. еУМЙ D1 ЙНЕЕФ ЧЙД D[ ЛПОУФБОФОПЕ_ЧЩТБЦЕОЙЕ] ЙМЙ D[] ФП ФЙР УПДЕТЦБЭЕЗПУС ЙДЕОФЙЖЙЛБФПТБ ЕУФШ "... НБУУЙЧ ПВЯЕЛФПЧ ФЙРБ T". ч РЕТЧПН УМХЮБЕ ЛПОУФБОФОПЕ_ЧЩТБЦЕОЙЕ ЕУФШ ЧЩТБЦЕОЙЕ, ЪОБЮЕОЙЕ ЛПФПТПЗП НПЦЕФ ВЩФШ ПРТЕДЕМЕОП ЧП ЧТЕНС ЛПНРЙМСГЙЙ, Й ФЙР ЛПФПТПЗП int. (лПОУФБОФОЩЕ ЧЩТБЦЕОЙС ПРТЕДЕМЕОЩ Ч #12.) еУМЙ РПДТСД ЙДХФ ОЕУЛПМШЛП УРЕГЙЖЙЛБГЙК "НБУУЙЧ ЙЪ", ФП УПЪДБЕФУС НОПЗПНЕТОЩК НБУУЙЧ; ЛПОУФБОФОПЕ ЧЩТБЦЕОЙЕ, ПРТЕДЕМСАЭЕЕ ЗТБОЙГЩ НБУУЙЧБ, НПЦЕФ ВЩФШ ПРХЭЕОП ФПМШЛП ДМС РЕТЧПЗП ЮМЕОБ РПУМЕДПЧБФЕМШОПУФЙ. ьФПФ РТПРХУЛ РПМЕЪЕО, ЛПЗДБ НБУУЙЧ СЧМСЕФУС ЧОЕЫОЙН, Й ОБУФПСЭЕЕ ПРТЕДЕМЕОЙЕ, ЛПФПТПЕ ТЕЪЕТЧЙТХЕФ РБНСФШ, ОБИПДЙФУС Ч ДТХЗПН НЕУФЕ. рЕТЧПЕ ЛПОУФБОФОПЕ ЧЩТБЦЕОЙЕ НПЦЕФ ФБЛЦЕ ВЩФШ ПРХЭЕОП, ЛПЗДБ ЪБ ПРЙУБФЕМЕН УМЕДХЕФ ЙОЙГЙБМЙЪБГЙС. ч ЬФПН УМХЮБЕ ЙУРПМШЪХЕФУС ТБЪНЕТ, ЧЩЮЙУМЕООЩК ЙУИПДС ЙЪ ЮЙУМБ ОБЮБМШОЩИ ЬМЕНЕОФПЧ. нБУУЙЧ НПЦЕФ ВЩФШ РПУФТПЕО ЙЪ ПДОПЗП ЙЪ ПУОПЧОЩИ ФЙРПЧ, ЙЪ ХЛБЪБФЕМЕК, ЙЪ УФТХЛФХТЩ ЙМЙ ПВЯЕДЙОЕОЙС ЙМЙ ЙЪ ДТХЗПЗП НБУУЙЧБ (ДМС РПМХЮЕОЙС НОПЗПНЕТОПЗП НБУУЙЧБ). оЕ ЧУЕ ЧПЪНПЦОПУФЙ, ЛПФПТЩЕ РПЪЧПМСЕФ РТЙЧЕДЕООЩК ЧЩЫЕ УЙОФБЛУЙУ, ДПРХУФЙНЩ. пЗТБОЙЮЕОЙС УМЕДХАЭЙЕ: ЖХОЛГЙС ОЕ НПЦЕФ ЧПЪЧТБЭБФШ НБУУЙЧ ЙМЙ ЖХОЛГЙА, ИПФС ПОБ НПЦЕФ ЧПЪЧТБЭБФШ ХЛБЪБФЕМЙ ОБ ЬФЙ ПВЯЕЛФЩ; ОЕ УХЭЕУФЧХЕФ НБУУЙЧПЧ ЖХОЛГЙК, ИПФС НПЗХФ ВЩФШ НБУУЙЧЩ ХЛБЪБФЕМЕК ОБ ЖХОЛГЙЙ. 8.4.1 рТЙНЕТЩ ч ЛБЮЕУФЧЕ РТЙНЕТБ, ПРЙУБОЙЕ int i; int *ip; int f (); int *fip (); int (*pfi) (); ПРЙУЩЧБЕФ ГЕМПЕ i, ХЛБЪБФЕМШ ip ОБ ГЕМПЕ, ЖХОЛГЙА f, ЧПЪЧТБЭБАЭХА ГЕМПЕ, ЖХОЛГЙА fip , ЧПЪЧТБЭБАЭХА ХЛБЪБФЕМШ ОБ ГЕМПЕ, Й ХЛБЪБФЕМШ pfi ОБ ЖХОЛГЙА, ЧПЪЧТБЭБАЭХА ГЕМПЕ. пУПВЕООП РПМЕЪОП УТБЧОЙФШ РПУМЕДОЙЕ ДЧЕ. гЕРПЮЛБ *fip() ЕУФШ *(fip()), ЛБЛ РТЕДРПМБЗБЕФУС Ч ПРЙУБОЙЙ, Й ФБ ЦЕ ЛПОУФТХЛГЙС ФТЕВХЕФУС Ч ЧЩТБЦЕОЙЙ, ЧЩЪПЧ ЖХОЛГЙЙ fip, Й ЪБФЕН ЛПУЧЕООПЕ ЙУРПМШЪПЧБОЙЕ ТЕЪХМШФБФБ ЮЕТЕЪ (ХЛБЪБФЕМШ) ДМС РПМХЮЕОЙС ГЕМПЗП. ч ПРЙУБФЕМЕ (*pfi)() ЧОЕЫОЙЕ УЛПВЛЙ ОЕПВИПДЙНЩ, РПУЛПМШЛХ ПОЙ ФБЛЦЕ ЧИПДСФ Ч ЧЩТБЦЕОЙЕ, ДМС ХЛБЪБОЙС ФПЗП, ЮФП ЖХОЛГЙС РПМХЮБЕФУС ЛПУЧЕООП ЮЕТЕЪ ХЛБЪБФЕМШ ОБ ЖХОГЙА, ЛПФПТБС ЪБФЕН ЧЩЪЩЧБЕФУС; ЬФП ЧПЪЧТБЭБЕФ ГЕМПЕ. жХОЛГЙЙ f Й fip ПРЙУБОЩ ЛБЛ ОЕ РПМХЮБАЭЙЕ РБТБНЕФТПЧ, Й fip ЛБЛ ХЛБЪЩЧБАЭБС ОБ ЖХОЛГЙА, ОЕ РПМХЮБАЭХА РБТБНЕФТПЧ. пРЙУБОЙЕ const a = 10, *pc = &a, *const cpc = pc; int b, *const cp = &b; ПРЙУЩЧБЕФ a: ГЕМХА ЛПОУФБОФХ, pc: ХЛБЪБФЕМШ ОБ ГЕМХА ЛПОУФБОФХ, cpc: ЛПОУФБОФОЩК ХЛБЪБФЕМШ ОБ ГЕМХА ЛПОУФБОФХ, b: ГЕМПЕ Й cp: ЛПОУФБОФОЩК ХЛБЪБФЕМШ ОБ ГЕМПЕ. ъОБЮЕОЙС a, cpc Й cp ОЕ НПЗХФ ВЩФШ ЙЪНЕОЕОЩ РПУМЕ ЙОЙГЙБМЙЪБГЙЙ. ъОБЮЕОЙЕ pc НПЦЕФ ВЩФШ ЙЪНЕОЕОП, ЛБЛ Й ПВЯЕЛФ, ХЛБЪЩЧБЕНЩК cp. рТЙНЕТЩ ОЕДПРХУФЙНЩИ ЧЩТБЦЕОЙК : a = 1; a++; *pc = 2; cp = &a; cpc++; рТЙНЕТЩ ДПРХУФЙНЩИ ЧЩТБЦЕОЙК : b = a; *cp = a; pc++; pc = cpc; пРЙУБОЙЕ fseek (FILE*,long,int); ПРЙУЩЧБЕФ ЖХОЛГЙА, РПМХЮБАЭХА ФТЙ РБТБНЕФТБ УРЕГЙБМШОЩИ ФЙРПЧ. рПУЛПМШЛХ ФЙР ЧПЪЧТБЭБЕНПЗП ЪОБЮЕОЙС ОЕ ПРТЕДЕМЕО, РТЙОЙНБЕФУС, ЮФП ПО int (#8.2). пРЙУБОЙЕ point (int = 0,int = 0); ПРЙУЩЧБЕФ ЖХОЛГЙА, ЛПФПТБС НПЦЕФ ВЩФШ ЧЩЪЧБОБ ВЕЪ РБТБНЕФТПЧ, У ПДОЙН ЙМЙ ДЧХНС РБТБНЕФТБНЙ ФЙРБ int. оБРТЙНЕТ point (1,2); point (1) /* ЙНЕЕФ УНЩУМ point (1,0); */ point () /* ЙНЕЕФ УНЩУМ point (0,0); */ пРЙУБОЙЕ printf (char* ... ); ПРЙУЩЧБЕФ ЖХОЛГЙА, ЛПФПТБС НПЦЕФ ВЩФШ ЧЩЪЩЧБФШУС У ТБЪМЙЮОЩНЙ ЮЙУМПН Й ФЙРБНЙ РБТБНЕФТПЧ. оБРТЙНЕТ printf ("hello, world"); printf ("a=%d b=%d",a,b); printf ("string=%s",st); пДОБЛП, ПОБ ЧУЕЗДБ ДПМЦОБ ЙНЕФШ УЧПЙН РЕТЧЩН РБТБНЕФТПН char*. ч ЛБЮЕУФЧЕ ДТХЗПЗП РТЙНЕТБ, float fa[17], *afp[17]; ПРЙУЩЧБЕФ НБУУЙЧ ЮЙУЕМ У РМБЧБАЭЕК ФПЮЛПК Й НБУУЙЧ ХЛБЪБФЕМЕК ОБ ЮЙУМБ У РМБЧБАЭЕК ФПЮЛПК. й, ОБЛПОЕГ, static int x3d[3][5][7]; ПРЙУЩЧБЕФ НБУУЙЧ ГЕМЩИ, ТБЪНЕТПН 3x6x7. уПЧУЕН РПДТПВОП: x3d СЧМСЕФУС НБУУЙЧПН ЙЪ ФТЕИ ЬМЕНЕОФПЧ; ЛБЦДЩК ЙЪ ЬМЕНЕОФПЧ СЧМСЕФУС НБУУЙЧПН ЙЪ РСФЙ ЬМЕНЕОФПЧ; ЛБЦДЩК ЙЪ РПУМЕДОЙИ ЬМЕНЕОФПЧ СЧМСЕФУС НБУУЙЧПН ЙЪ УЕНЙ ГЕМЩИ. рПСЧМЕОЙЕ ЛБЦДПЕ ЙЪ ЧЩТБЦЕОЙК x3d, x3d[i], x3d[i][j], x3d[i][j][k] НПЦЕФ ВЩФШ РТЙЕНМЕНП. рЕТЧЩЕ ФТЙ ЙНЕАФ ФЙР "НБУУЙЧ", РПУМЕДОЙК ЙНЕЕФ ФЙР int. 8.5 пРЙУБОЙС ЛМБУУПЧ лМБУУ УРЕГЙЖЙГЙТХЕФ ФЙР. еЗП ЙНС УФБОПЧЙФУС typedef-ЙНС (УН. #8.8), ЛПФПТПЕ НПЦЕФ ВЩФШ ЙУРПМШЪПЧБОП ДБЦЕ ЧОХФТЙ УБНПЗП УРЕГЙЖЙЛБФПТБ ЛМБУУБ. пВЯЕЛФЩ ЛМБУУБ УПУФПСФ ЙЪ РПУМЕДПЧБФЕМШОПУФЙ ЮМЕОПЧ. УРЕГЙЖЙЛБФПТ_ЛМБУУБ: ЪБЗПМПЧПЛ_ЛМБУУБ { УРЙУПЛ_ЮМЕОПЧ opt } ЪБЗПМПЧПЛ_ЛМБУУБ { УРЙУПЛ_ЮМЕОПЧ opt public : УРЙУПЛ_ЮМЕОПЧ opt } ЪБЗПМПЧПЛ_ЛМБУУБ: БЗТЕЗ ЙДЕОФЙЖЙЛБФПТ opt БЗТЕЗ ЙДЕОФЙЖЙЛБФПТ opt : public opt typedef-ЙНС БЗТЕЗ: class struct union уФТХЛФХТБ СЧМСЕФУС ЛМБУУПН, ЧУЕ ЮМЕОЩ ЛПФПТПЗП ПВЭЙЕ; УН. #8.5.8. пВЯЕДЙОЕОЙЕ СЧМСЕФУС ЛМБУУПН, УПДЕТЦБЭЙН Ч ЛБЦДЩК НПНЕОФ ФПМШЛП ПДЙО ЮМЕО; УН. #8.5.12. уРЙУПЛ ЮМЕОПЧ НПЦЕФ ПРЙУЩЧБФШ ЮМЕОЩ ЧЙДБ: ДБООЩЕ, ЖХОЛГЙС, ЛМБУУ, ПРТЕДЕМЕОЙЕ ФЙРБ, РЕТЕЮЙУМЕОЙЕ Й РПМЕ. рПМС ПВУХЦДБАФУС Ч #8.5.13. уРЙУПЛ ЮМЕОПЧ НПЦЕФ ФБЛЦЕ УПДЕТЦБФШ ПРЙУБОЙС, ТЕЗХМЙТХАЭЙЕ ЧЙДЙНПУФШ ЙНЕО ЮМЕОПЧ; УН. #8.5.8. УРЙУПЛ_ЮМЕОПЧ: ПРЙУБОЙЕ_ЮМЕОБ УРЙУПЛ_ЮМЕОПЧ opt ПРЙУБОЙЕ_ЮМЕОБ: УРЕГЙЖЙЛБФПТЩ_ПРЙУБОЙС opt ПРЙУБФЕМШ_ЮМЕОБ; ПРЙУБФЕМШ_ЮМЕОБ: ПРЙУБФЕМШ ЙДЕОФЙЖЙЛБФПТ opt : ЛПОУФБОФОПЕ_ЧЩТБЦЕОЙЕ юМЕОЩ, СЧМСАЭЙЕУС ЛМБУУПЧЩНЙ ПВЯЕЛФБНЙ, ДПМЦОЩ ВЩФШ ПВЯЕЛФБНЙ РТЕДЧБТЙФЕМШОП РПМОПУФША ПРЙУБООЩИ ЛМБУУПЧ. ч ЮБУФОПУФЙ, ЛМБУУ cl ОЕ НПЦЕФ УПДЕТЦБФШ ПВЯЕЛФ ЛМБУУБ cl, ОП ПО НПЦЕФ УПДЕТЦБФШ ХЛБЪБФЕМШ ОБ ПВЯЕЛФ ЛМБУУБ cl. йНЕОБ ПВЯЕЛФПЧ Ч ТБЪМЙЮОЩИ ЛМБУУБИ ОЕ ЛПОЖМЙЛФХАФ НЕЦДХ УПВПК Й У ПВЩЮОЩНЙ РЕТЕНЕООЩНЙ. чПФ РТПУФПК РТЙНЕТ ПРЙУБОЙС УФТХЛФХТЩ: struct tnode { char tword[20]; int count; tnode *left; tnode *right; }; УПДЕТЦБЭЕК НБУУЙЧ ЙЪ 20 УЙНЧПМПЧ, ГЕМПЕ Й ДЧБ ХЛБЪБФЕМС ОБ ФБЛЙЕ ЦЕ УФТХЛФХТЩ. еУМЙ ВЩМП ДБОП ФБЛПЕ ПРЙУБОЙЕ, ФП ПРЙУБОЙЕ tnode s, *sp ПРЙУЩЧБЕФ s ЛБЛ УФТХЛФХТХ ДБООПЗП УПТФБ Й sp ЛБЛ ХЛБЪБФЕМШ ОБ УФТХЛФХТХ ДБООПЗП УПТФБ. рТЙ ОБМЙЮЙЙ ЬФЙИ ПРЙУБОЙК ЧЩТБЦЕОЙЕ sp->count УУЩМБЕФУС ОБ РПМЕ count УФТХЛФХТЩ, ОБ ЛПФПТХА ХЛБЪЩЧБЕФ sp; s.left УУЩМБЕФУС ОБ ХЛБЪБФЕМШ МЕЧПЗП РПДДЕТЕЧБ УФТХЛФХТЩ s; Б s.right->tword[0] УУЩМБЕФУС ОБ РЕТЧЩК УЙНЧПМ ЮМЕОБ tword РТБЧПЗП РПДДЕТЕЧБ УФТХЛФХТЩ s. 8.5.1 уФБФЙЮЕУЛЙЕ ЮМЕОЩ юМЕО-ДБООЩЕ ЛМБУУБ НПЦЕФ ВЩФШ static; ЮМЕОЩ-ЖХОЛГЙЙ ОЕ НПЗХФ. юМЕОЩ ОЕ НПЗХФ ВЩФШ auto, register ЙМЙ extern. еУФШ ЕДЙОУФЧЕООБС ЛПРЙС УФБФЙЮЕУЛПЗП ЮМЕОБ, УПЧНЕУФОП ЙУРПМШЪХЕНБС ЧУЕНЙ ЮМЕОБНЙ ЛМБУУБ Ч РТПЗТБННЕ. оБ УФБФЙЮЕУЛЙК ЮМЕО mem ЛМБУУБ cl НПЦОП УУЩМБФШУС cl:mem, ФП ЕУФШ ВЕЪ УУЩМЛЙ ОБ ПВЯЕЛФ. пО УХЭЕУФЧХЕФ, ДБЦЕ ЕУМЙ ОЕ ВЩМП УПЪДБОП ОЙ ПДОПЗП ПВЯЕЛФБ ЛМБУУБ cl. 8.5.2 жХОЛГЙЙ ЮМЕОЩ жХОЛГЙС, ПРЙУБООБС ЛБЛ ЮМЕО, (ВЕЪ УРЕГЙЖЙЛБФПТБ friend (#8.5.9)) ОБЪЩЧБЕФУС ЖХОЛГЙЕК ЮМЕОПН Й ЧЩЪЩЧБЕФУС У РПНПЭША УЙОФБЛУЙУБ ЮМЕОБ ЛМБУУБ (#7.1). оБРТЙНЕТ: struct tnode { char tword[20]; int count; tnode *left; tnode *right; void set (char* w,tnode* l,tnode* r); }; tnode n1, n2; n1.set ("asdf",&n2,0); n2.set ("ghjk",0,0); пРТЕДЕМЕОЙЕ ЖХОЛГЙЙ ЮМЕОБ ТБУУНБФТЙЧБЕФУС ЛБЛ ОБИПДСЭЕЕУС Ч ПВМБУФЙ ЧЙДЙНПУФЙ ЕЕ ЛМБУУБ. ьФП ЪОБЮЙФ, ЮФП ПОБ НПЦЕФ ОЕРПУТЕДУФЧЕООП ЙУРПМШЪПЧБФШ ЙНЕОБ ЕЕ ЛМБУУБ. еУМЙ ПРТЕДЕМЕОЙЕ ЖХОЛГЙЙ ЮМЕОБ ОБИПДЙФУС ЧОЕ ПРЙУБОЙС ЛМБУУБ, ФП ЙНС ЖХОЛГЙЙ ЮМЕОБ ДПМЦОП ВЩФШ ХФПЮОЕОП ЙНЕОЕН ЛМБУУБ У РПНПЭША ЪБРЙУЙ typedef-ЙНС . РТПУФПЕ_ПР_ЙНС УН. 3.3. пРТЕДЕМЕОЙС ЖХОЛГЙК ПВУХЦДБАФУС Ч #10.1. оБРТЙНЕТ: void tnode.set (char* w,tnode* l,tnode* r) { count = strlen (w); if (sizeof (tword) mem - УЙОПОЙНЩ Ч ЖХОЛГЙЙ ЮМЕОЕ ЛМБУУБ cl (ЕУМЙ mem ОЕ ВЩМ ЙУРПМШЪПЧБО Ч ЛБЮЕУФЧЕ ЙНЕОЙ МПЛБМШОПК РЕТЕНЕООПК Ч РТПНЕЦХФПЮОПК ПВМБУФЙ ЧЙДЙНПУФЙ). жХОЛГЙС ЮМЕО НПЦЕФ ВЩФШ ПРТЕДЕМЕОБ (#10.1) Ч ПРЙУБОЙЙ ЛМБУУБ. рПНЕЭЕОЙЕ ПРТЕДЕМЕОЙС ЖХОЛГЙЙ ЮМЕОБ Ч ПРЙУБОЙЕ ЛМБУУБ СЧМСЕФУС ЛТБФЛЙН ЧЙДПН ЪБРЙУЙ ПРЙУБОЙС ЕЕ Ч ПРЙУБОЙЙ ЛМБУУБ Й ЪБФЕН ПРТЕДЕМЕОЙС ЕЕ ЛБЛ inline (#8.1) УТБЪХ РПУМЕ ПРЙУБОЙС ЛМБУУБ. оБРТЙНЕТ: int b; struct x { int f () { return b; } int f () { return b; } int b; }; ПЪОБЮБЕФ int b; struct x { int f (); int b; }; inline x.f () { return b; } дМС ЖХОЛГЙК ЮМЕОПЧ ОЕ ОХЦОП ЙУРПМШЪПЧБОЙЕ УРЕГЙЖЙЛБФПТБ overload (#8.2): ЕУМЙ ЙНС ПРЙУЩЧБЕФУС ЛБЛ ПЪОБЮБАЭЕЕ ОЕУЛПМШЛП ЙНЕО Ч ЛМБУУЕ, ФП ПОП РЕТЕЗТХЦЕОП (УН. #8.9). рТЙНЕОЕОЙЕ ПРЕТБГЙЙ РПМХЮЕОЙС БДТЕУБ Л ЖХОЛГЙСН ЮМЕОБН ДПРХУФЙНП. фЙР РБТБНЕФТБ ТЕЪХМШФЙТХАЭЕК ЖХОЛГЙЙ ХЛБЪБФЕМШ ОБ ЕУФШ (...), ФП ЕУФШ, ОЕЙЪЧЕУФЕО (#8.4). мАВПЕ ЙУРПМШЪПЧБОЙЕ ЕЗП СЧМСЕФУС ЪБЧЙУЙНЩН ПФ ТЕБМЙЪБГЙЙ, РПУЛПМШЛХ УРПУПВ ЙОЙГЙБМЙЪБГЙЙ ХЛБЪБФЕМС ДМС ЧЩЪПЧБ ЖХОЛГЙЙ ЮМЕОБ ОЕ ПРТЕДЕМЕО. 8.5.3 рТПЙЪЧПДОЩЕ ЛМБУУЩ ч ЛПОУФТХЛГЙЙ БЗТЕЗ ЙДЕОФЙЖЙЛБФПТ:public opt typedef-ЙНС typedef-ЙНС ДПМЦОП ПЪОБЮБФШ ТБОЕЕ ПРЙУБООЩК ЛМБУУ, ОБЪЩЧБЕНЩК ВБЪПЧЩН ЛМБУУПН ДМС ЛМБУУБ, РПДМЕЦБЭЕЗП ПРЙУБОЙА. зПЧПТЙФУС, ЮФП РПУМЕДОЙК ЧЩЧПДЙФУС ЙЪ РТЕДЫЕУФЧХАЭЕЗП. оБ ЮМЕОЩ ВБЪПЧПЗП ЛМБУУБ НПЦОП УУЩМБФШУС, ЛБЛ ЕУМЙ ВЩ ПОЙ ВЩМЙ ЮМЕОБНЙ РТПЙЪЧПДОПЗП ЛМБУУБ, ЪБ ЙУЛМАЮЕОЙЕН ФЕИ УМХЮБЕЧ, ЛПЗДБ ЙНС ВБЪПЧПЗП ЮМЕОБ ВЩМП РЕТЕПРТЕДЕМЕОП Ч РТПЙЪЧПДОПН ЛМБУУЕ; Ч ЬФПН УМХЮБЕ ДМС УУЩМЛЙ ОБ УЛТЩФПЕ ЙНС НПЦЕФ ЙУРПМШЪПЧБФШУС ФБЛБС ЪБРЙУШ (#7.1): typedef-ЙНС :: ЙДЕОФЙЖЙЛБФПТ оБРТЙНЕТ: struct base { int a; int b; }; struct derived : public base { int b; int c; }; derived d; d.a = 1; d.base::b = 2; d.b = 3; d.c = 4; ПУХЭЕУФЧМСЕФ РТЙУЧБЙЧБОЙЕ ЮЕФЩТЕН ЮМЕОБН d. рТПЙЪЧПДОЩК ФЙР УБН НПЦЕФ ЙУРПМШЪПЧБФШУС ЛБЛ ВБЪПЧЩК. 8.5.4 чЙТФХБМШОЩЕ ЖХОЛГЙЙ еУМЙ ВБЪПЧЩК ЛМБУУ base УПДЕТЦЙФ (ЧЙТФХБМШОХА) virtual (#8.1) ЖХОЛГЙА vf, Б РТПЙЪЧПДОЩК ЛМБУУ derived ФБЛЦЕ УПДЕТЦЙФ ЖХОЛГЙА vf, ФП ЧЩЪПЧ vf ДМС ПВЯЕЛФБ ЛМБУУБ derived ЧЩЪЩЧБЕФ derived::vf. оБРТЙНЕТ: struct base { virtual void vf (); void f (); }; struct derived : public base { void vf (); void f (); }; derived d; base* bp = &d; bp->vf (); bp->f (); чЩЪПЧЩ ЧЩЪЩЧБАФ, УППФЧЕФУФЧЕООП, derived::vf Й base::f ДМС ПВЯЕЛФБ ЛМБУУБ derived, ЙНЕОПЧБООПЗП d. фБЛ ЮФП ЙОФЕТРТЕФБГЙС ЧЩЪПЧБ ЧЙТФХБМШОПК ЖХОЛГЙЙ ЪБЧЙУЙФ ПФ ФЙРБ ПВЯЕЛФБ, ДМС ЛПФПТПЗП ПОБ ЧЩЪЧБОБ, Ч ФП ЧТЕНС ЛБЛ ЙОФЕТРТЕФБГЙС ЧЩЪПЧБ ОЕЧЙТФХБМШОПК ЖХОЛГЙЙ ЪБЧЙУЙФ ФПМШЛП ПФ ФЙРБ ХЛБЪБФЕМС, ПВПЪОБЮБАЭЕЗП ПВЯЕЛФ. йЪ ЬФПЗП УМЕДХЕФ, ЮФП ФЙР ПВЯЕЛФПЧ ЛМБУУПЧ У ЧЙТФХБМШОЩНЙ ЖХОЛГЙСНЙ Й ПВЯЕЛФПЧ ЛМБУУПЧ, ЧЩЧЕДЕООЩИ ЙЪ ФБЛЙИ ЛМБУУПЧ, НПЗХФ ВЩФШ ПРТЕДЕМЕОЩ ЧП ЧТЕНС ЧЩРПМОЕОЙС. еУМЙ РТПЙЪЧПДОЩК ЛМБУУ ЙНЕЕФ ЮМЕО У ФЕН ЦЕ ЙНЕОЕН, ЮФП Й Х ЧЙТФХБМШОПК ЖХОЛГЙЙ Ч ВБЪПЧПН ЛМБУУЕ, ФП ПВБ ЮМЕОБ ДПМЦОЩ ЙНЕФШ ПДЙОБЛПЧЩК ФЙР. чЙТФХБМШОБС ЖХОЛГЙС ОЕ НПЦЕФ ВЩФШ ДТХЗПН (friend) (#8.5.9). жХОЛГЙС f Ч ЛМБУУЕ, ЧЩЧЕДЕООПН ЙЪ ЛМБУУБ, ЛПФПТЩК ЙНЕЕФ ЧЙТФХБМШОХА ЖХОЛГЙА f, УБНБ ТБУУНБФТЙЧБЕФУС ЛБЛ ЧЙТФХБМШОБС. чЙТФХБМШОБС ЖХОЛГЙС Ч ВБЪПЧПН ЛМБУУЕ ДПМЦОБ ВЩФШ ПРТЕДЕМЕОБ. чЙТФХБМШОБС ЖХОЛГЙС, ЛПФПТБС ВЩМБ ПРТЕДЕМЕОБ Ч ВБЪПЧПН ЛМБУУЕ, ОЕ ОХЦДБЕФУС Ч ПРТЕДЕМЕОЙЙ Ч РТПЙЪЧПДОПН ЛМБУУЕ. ч ЬФПН УМХЮБЕ ЖХОЛГЙС, ПРТЕДЕМЕООБС ДМС ВБЪПЧПЗП ЛМБУУБ, ЙУРПМШЪХЕФУС ЧП ЧУЕИ ЧЩЪПЧБИ. 8.5.5 лПОУФТХЛФПТЩ юМЕО ЖХОЛГЙС У ЙНЕОЕН, УПЧРБДБАЭЙН У ЙНЕОЕН ЕЕ ЛМБУУБ, ОБЪЩЧБЕФУС ЛПОУФТХЛФПТПН. лПОУФТХЛФПТ ОЕ ЙНЕЕФ ФЙРБ ЧПЪЧТБЭБЕНПЗП ЪОБЮЕОЙС; ПО ЙУРПМШЪХЕФУС ДМС ЛПОУФТХЙТПЧБОЙС ЪОБЮЕОЙК У ФЙРПН ЕЗП ЛМБУУБ. у РПНПЭША ЛПОУФТХЛФПТБ НПЦОП УПЪДБЧБФШ ОПЧЩЕ ПВЯЕЛФЩ ЕЗП ФЙРБ, ЙУРПМШЪХС УЙОФБЛУЙУ typedef-ЙНС ( УРЙУПЛ_РБТБНЕФТПЧ opt ) оБРТЙНЕТ, complex zz = complex (1,2.3); cprint (complex (7.8,1.2)); пВЯЕЛФЩ, УПЪДБООЩЕ ФБЛЙН ПВТБЪПН, ОЕ ЙНЕАФ ЙНЕОЙ (ЕУМЙ ЛПОУФТХЛФПТ ОЕ ЙУРПМШЪПЧБО ЛБЛ ЙОЙГЙБМЙЪБФПТ, ЛБЛ ЬФП ВЩМП У zz ЧЩЫЕ), Й ЙИ ЧТЕНС ЦЙЪОЙ ПЗТБОЙЮЕОП ПВМБУФША ЧЙДЙНПУФЙ, Ч ЛПФПТПК ПОЙ УПЪДБОЩ. пОЙ ОЕ НПЗХФ ТБУУНБФТЙЧБФШУС ЛБЛ ЛПОУФБОФЩ ЙИ ФЙРБ. еУМЙ ЛМБУУ ЙНЕЕФ ЛПОУФТХЛФПТ, ФП ПО ЧЩЪЩЧБЕФУС ДМС ЛБЦДПЗП ПВЯЕЛФБ ЬФПЗП ЛМБУУБ РЕТЕД ФЕН, ЛБЛ ЬФПФ ПВЯЕЛФ ВХДЕФ ЛБЛ-МЙВП ЙУРПМШЪПЧБО; УН. #8.6. лПОУФТХЛФПТ НПЦЕФ ВЩФШ overload, ОП ОЕ virtual ЙМЙ friend. еУМЙ ЛМБУУ ЙНЕЕФ ВБЪПЧЩК ЛМБУУ У ЛПОУФТХЛФПТПН, ФП ЛПОУФТХЛФПТ ДМС ВБЪПЧПЗП ЛМБУУБ ЧЩЪЩЧБЕФУС ДП ЧЩЪПЧБ ЛПОУФТХЛФПТБ ДМС РТПЙЪЧПДОПЗП ЛМБУУБ. лПОУФТХЛФПТЩ ДМС ПВЯЕЛФПЧ ЮМЕОПЧ, ЕУМЙ ФБЛПЧЩЕ ЕУФШ, ЧЩРПМОСАФУС РПУМЕ ЛПОУФТХЛФПТБ ВБЪПЧПЗП ЛМБУУБ Й ДП ЛПОУФТХЛФПТБ ПВЯЕЛФБ, УПДЕТЦБЭЕЗП ЙИ. пВЯСУОЕОЙЕ ФПЗП, ЛБЛ НПЗХФ ВЩФШ УРЕГЙЖЙГЙТПЧБОЩ РБТБНЕФТЩ ДМС ВБЪПЧПЗП ЛМБУУБ, УН. Ч #8.6.2, Б ФПЗП, ЛБЛ ЛПОУФТХЛФПТЩ НПЗХФ ЙУРПМШЪПЧБФШУС ДМС ХРТБЧМЕОЙС УЧПВПДОПК РБНСФША, УН. Ч #17. 8.5.6 рТЕПВТБЪПЧБОЙС лПОУФТХЛФПТ, РПМХЮБАЭЙК ПДЙО РБТБНЕФТ, ПРТЕДЕМСЕФ РТЕПВТБЪПЧБОЙЕ ЙЪ ФЙРБ УЧПЕЗП РБТБНЕФТБ Ч ФЙР УЧПЕЗП ЛМБУУБ. фБЛЙЕ РТЕПВТБЪПЧБОЙС ОЕСЧОП РТЙНЕОСАФУС ДПРПМОЙФЕМШОП Л ПВЩЮОЩН БТЙЖНЕФЙЮЕУЛЙН РТЕПВТБЪПЧБОЙСН. рПЬФПНХ РТЙУЧБЙЧБОЙЕ ПВЯЕЛФХ ЙЪ ЛМБУУБ X ДПРХУФЙНП, ЕУМЙ ЙМЙ РТЙУЧБЙЧБЕНПЕ ЪОБЮЕОЙЕ СЧМСЕФУС X, ЙМЙ ЕУМЙ X ЙНЕЕФ ЛПОУФТХЛФПТ, ЛПФПТЩК РПМХЮБЕФ РТЙУЧБЙЧБЕНПЕ ЪОБЮЕОЙЕ ЛБЛ УЧПК ЕДЙОУФЧЕООЩК РБТБНЕФТ. бОБМПЗЙЮОП ЛПОУФТХЛФПТЩ ЙУРПМШЪХАФУС ДМС РТЕПВТБЪПЧБОЙС РБТБНЕФТПЧ ЖХОЛГЙЙ (#7.1) Й ЙОЙГЙБМЙЪБФПТПЧ (#8.6). оБРТЙНЕТ: class X { ... X (int); }; f (X arg) { X a = 1; /* a = X (1) */ a = 2; /* a = X (2) */ f (3); /* f (X (3)) */ } еУМЙ ДМС ЛМБУУБ X ОЕ ОБКДЕО ОЙПДЙО ЛПОУФТХЛФПТ, РТЙОЙНБАЭЙК РТЙУЧБЙЧБЕНЩК ФЙР, ФП ОЕ ДЕМБЕФУС ОЙЛБЛЙИ РПРЩФПЛ ПФЩУЛБФШ ЛПОУФТХЛФПТ ДМС РТЕПВТБЪПЧБОЙС РТЙУЧБЙЧБЕНПЗП ФЙРБ Ч ФЙР, ЛПФПТЩК НПЗ ВЩ ВЩФШ РТЙЕНМЕН ДМС ЛПОУФТХЛФПТПЧ ЛМБУУБ X. оБРТЙНЕТ: class X { ... X (int); }; class X { ... Y (X); }; Y a = 1; /* ОЕДПРХУФЙНП: Y (X (1)) ОЕ РТПВХЕФУС */ 8.5.7 дЕУФТХЛФПТЩ жХОЛГЙС ЮМЕО ЛМБУУБ cl У ЙНЕОЕН ~cl ОБЪЩЧБЕФУС ДЕУФТХЛФПТПН. дЕУФТХЛФПТ ОЕ ЧПЪЧТБЭБЕФ ОЙЛБЛПЗП ЪОБЮЕОЙС Й ОЕ РПМХЮБЕФ ОЙЛБЛЙИ РБТБНЕФТПЧ; ПО ЙУРПМШЪХЕФУС ДМС ХОЙЮФПЦЕОЙС ЪОБЮЕОЙК ФЙРБ cl ОЕРПУТЕДУФЧЕООП РЕТЕД ХОЙЮФПЦЕОЙЕН УПДЕТЦБЭЕЗП ЙИ ПВЯЕЛФБ. дЕУФТХЛФПТ ОЕ НПЦЕФ ВЩФШ overload, virtual ЙМЙ friend. дЕУФТХЛФПТ ДМС ВБЪПЧПЗП ЛМБУУБ ЧЩРПМОСЕФУС РПУМЕ ДЕУФТХЛФПТБ РТПЙЪЧПДОПЗП ПФ ОЕЗП ЛМБУУБ. лБЛ ДЕУФТХЛФПТЩ ЙУРПМШЪХАФУС ДМС ХРТБЧМЕОЙС УЧПВПДОПК РБНСФША, УН. ПВЯСУОЕОЙЕ Ч #17. 8.5.8 чЙДЙНПУФШ ЙНЕО ЮМЕОПЧ юМЕОЩ ЛМБУУБ, ПРЙУБООЩЕ У ЛМАЮЕЧЩН УМПЧПН class, СЧМСАФУС ЪБЛТЩФЩНЙ, ЬФП ЪОБЮЙФ, ЮФП ЙИ ЙНЕОБ НПЗХФ ЙУРПМШЪПЧБФШУС ФПМШЛП ЖХОЛГЙСНЙ ЮМЕОБНЙ (#8.5.2) Й ДТХЪШСНЙ (УН. #8.5.10), РПЛБ ПОЙ ОЕ РПСЧСФУС РПУМЕ НЕФЛЙ public: . ч ЬФПН УМХЮБЕ ПОЙ СЧМСАФУС ПВЭЙНЙ. пВЭЙК ЮМЕО НПЦЕФ ЙУРПМШЪПЧБФШУС МАВПК ЖХОЛГЙЕК. уФТХЛФХТБ СЧМСЕФУС ЛМБУУПН, ЧУЕ ЮМЕОЩ ЛПФПТПЗП ПВЭЙЕ; УН. #8.5.11. еУМЙ РЕТЕД ЙНЕОЕН ВБЪПЧПЗП ЛМБУУБ Ч ПРЙУБОЙЙ РТПЙЪЧПДОПЗП ЛМБУУБ УФПЙФ ЛМАЮЕЧПЕ УМПЧП public, ФП ПВЭЙЕ ЮМЕОЩ ВБЪПЧПЗП ЛМБУУБ СЧМСАФУС ПВЭЙНЙ ДМС РТПЙЪЧПДОПЗП ЛМБУУБ; ЕУМЙ ОЕФ, ФП ПОЙ СЧМСАФУС ЪБЛТЩФЩНЙ. пВЭЙК ЮМЕО mem ЪБЛТЩФПЗП ВБЪПЧПЗП ЛМБУУБ base НПЦЕФ ВЩФШ ПРЙУБО ЛБЛ ПВЭЙК ДМС РТПЙЪЧПДОПЗП ЛМБУУБ У РПНПЭША ПРЙУБОЙС ЧЙДБ typedef-ЙНС . ЙДЕОФЙЖЙЛБФПТ; Ч ЛПФПТПН typedef-ЙНС ПЪОБЮБЕФ ВБЪПЧЩК ЛМБУУ, Б ЙДЕОФЙЖЙЛБФПТ ЕУФШ ЙНС ЮМЕОБ ВБЪПЧПЗП ЛМБУУБ. фБЛПЕ ПРЙУБОЙЕ НПЦЕФ РПСЧМСФШУС Ч ПВЭЕК ЮБУФЙ РТПЙЪЧПДОПЗП ЛМБУУБ. тБУУНПФТЙН class base { int a; public: int b,c; int bf (); }; class derived : base { int d; public: base.c; int e; int df (); }; int ef (derived&); чОЕЫОСС ЖХОЛГЙС ef НПЦЕФ ЙУРПМШЪПЧБФШ ФПМШЛП ЙНЕОБ c, e Й df. сЧМССУШ ЮМЕОПН derived, ЖХОЛГЙС df НПЦЕФ ЙУРПМШЪПЧБФШ ЙНЕОБ b, c, bf, d, e Й df, ОП ОЕ a. сЧМССУШ ЮМЕОПН base, ЖХОЛГЙС bf НПЦЕФ ЙУРПМШЪПЧБФШ ЮМЕОЩ a, b, c Й bf. 8.5.9 дТХЪШС (friends) дТХЗПН ЛМБУУБ СЧМСЕФУС ЖХОЛГЙС ОЕ-ЮМЕО, ЛПФПТБС НПЦЕФ ЙУРПМШЪПЧБФШ ЙНЕОБ ЪБЛТЩФЩИ ЮМЕОПЧ. уМЕДХАЭЙК РТЙНЕТ ЙММАУФТЙТХЕФ ТБЪМЙЮЙС НЕЦДХ ЮМЕОБНЙ Й ДТХЪШСНЙ: class private { int a; friend void friend_set (private*,int); public: void member_set (int); }; void friend_set (private* p,int i) { p->a=i; } void private.member_set (int i) { a = i; } private obj; friend_set (&obj,10); obj.member_set (10); еУМЙ ПРЙУБОЙЕ friend ПФОПУЙФУС Л РЕТЕЗТХЦЕООПНХ ЙНЕОЙ ЙМЙ ПРЕТБГЙЙ, ФП ДТХЗПН УФБОПЧЙФУС ФПМШЛП ЖХОЛГЙС У ПРЙУБООЩНЙ ФЙРБНЙ РБТБНЕФТПЧ. чУЕ ЖХОЛГЙЙ ЛМБУУБ cl1 НПЗХФ ВЩФШ УДЕМБОЩ ДТХЪШСНЙ ЛМБУУБ cl2 У РПНПЭША ПДОПЗП ПРЙУБОЙС class cl2 { friend cl1; . . . }; 8.5.10 жХОЛГЙС ПРЕТБГЙС вПМШЫЙОУФЧП ПРЕТБГЙК НПЗХФ ВЩФШ РЕТЕЗТХЦЕОЩ У ФЕН, ЮФПВЩ ПОЙ НПЗМЙ РПМХЮБФШ Ч ЛБЮЕУФЧЕ ПРЕТБОДПЧ ПВЯЕЛФЩ ЛМБУУБ. ЙНС_ЖХОЛГЙЙ_ПРЕТБГЙЙ: operator op op: + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> = == != = && || ++ -- () [] рПУМЕДОЙЕ ДЧЕ ПРЕТБГЙЙ - ЬФП ЧЩЪПЧ ЖХОЛГЙЙ Й ЙОДЕЛУЙТПЧБОЙЕ. жХОЛГЙС ПРЕТБГЙС НПЦЕФ ЙМЙ ВЩФШ ЖХОЛГЙЕК ЮМЕОПН, ЙМЙ РПМХЮБФШ РП НЕОШЫЕК НЕТЕ ПДЙО РБТБНЕФТ ЛМБУУБ. уН. ФБЛЦЕ #7.1.6. 8.5.11 уФТХЛФХТЩ уФТХЛФХТБ ЕУФШ ЛМБУУ, ЧУЕ ЮМЕОЩ ЛПФПТПЗП ПВЭЙЕ. ьФП ЪОБЮЙФ, ЮФП struct s { ... }; ЬЛЧЙЧБМЕОФОП class s { public: ... }; уФТХЛФХТБ НПЦЕФ ЙНЕФШ ЖХОЛГЙЙ ЮМЕОЩ (ЧЛМАЮБС ЛПОУФТХЛФПТЩ Й ДЕУФТХЛФПТЩ). 8.5.12 пВЯЕДЙОЕОЙС пВЯЕДЙОЕОЙЕ НПЦОП УЮЙФБФШ УФТХЛФХТПК, ЧУЕ ПВЯЕЛФЩ ЮМЕОЩ ЛПФПТПК ОБЮЙОБАФУС УП УНЕЭЕОЙС 0, Й ТБЪНЕТ ЛПФПТПК ДПУФБФПЮЕО ДМС УПДЕТЦБОЙС МАВПЗП ЙЪ ЕЕ ПВЯЕЛФПЧ ЮМЕОПЧ. ч ЛБЦДЩК НПНЕОФ ЧТЕНЕОЙ Ч ПВЯЕДЙОЕОЙЙ НПЦЕФ ИТБОЙФШУС ОЕ ВПМШЫЕ ПДОПЗП ЙЪ ПВЯЕЛФПЧ ЮМЕОПЧ. пВЯЕДЙОЕОЙЕ НПЦЕФ ЙНЕФШ ЖХОЛГЙЙ ЮМЕОЩ (ЧЛМАЮБС ЛПОУФТХЛФПТЩ Й ДЕУФТХЛФПТЩ). 8.5.13 рПМС ВЙФ пРЙУБФЕМШ ЮМЕОБ ЧЙДБ ЙДЕОФЙЖЙЛБФПТ opt: ЛПОУФБОФОПЕ_ЧЩТБЦЕОЙЕ ПРТЕДЕМСЕФ РПМЕ; ЕЗП ДМЙОБ ПФДЕМСЕФУС ПФ ЙНЕОЙ РПМС ДЧПЕФПЮЙЕН. рПМС ХРБЛПЧЩЧБАФУС Ч НБЫЙООЩЕ ГЕМЩЕ; ПОЙ ОЕ СЧМСАФУС БМШФЕТОБФЙЧПК УМПЧ. рПМЕ , ОЕ ЧМЕЪБАЭЕЕ Ч ПУФБЧЫЕЕУС Ч ГЕМПН НЕУФП, РПНЕЭБЕФУС Ч УМЕДХАЭЕЕ УМПЧП. рПМЕ ОЕ НПЦЕФ ВЩФШ ЫЙТЕ УМПЧБ. оБ ОЕЛПФПТЩИ НБЫЙОБИ ПОЙ ТБЪНЕЭБАФУС УРТБЧБ ОБМЕЧП, Б ОБ ОЕЛПФПТЩИ УМЕЧБ ОБРТБЧП; УН. #2.6. оЕЙНЕОПЧБООЩЕ РПМС РПМЕЪОЩ РТЙ ЪБРПМОЕОЙЙ ДМС УПЗМБУПЧБОЙС ЧОЕЫОЕ РТЕДРЙУБООЩИ ТБЪНЕЭЕОЙК (ЖПТНБФПЧ). ч ПУПВЩИ УМХЮБСИ ОЕЙНЕОПЧБООЩЕ РПМС ДМЙОЩ 0 ЪБДБАФ ЧЩТБЧОЙЧБОЙЕ УМЕДХАЭЕЗП РПМС РП ЗТБОЙГЕ УМПЧБ. оЕ ФТЕВХЕФУС БРРБТБФОПК РПДДЕТЦЛЙ МАВЩИ РПМЕК, ЛТПНЕ ГЕМЩИ. вПМЕЕ ФПЗП, ДБЦЕ ГЕМЩЕ РПМС НПЗХФ ТБУУНБФТЙЧБФШУС ЛБЛ unsigned. рП ЬФЙН РТЙЮЙОБН ТЕЛПНЕОДХЕФУС ПРЙУЩЧБФШ РПМС ЛБЛ unsigned. л РПМСН ОЕ НПЦЕФ РТЙНЕОСФШУС ПРЕТБГЙС РПМХЮЕОЙС БДТЕУБ &, РПЬФПНХ ОЕФ ХЛБЪБФЕМЕК ОБ РПМС. рПМС ОЕ НПЗХФ ВЩФШ ЮМЕОБНЙ ПВЯЕДЙОЕОЙС. 8.5.14 чМПЦЕООЩЕ ЛМБУУЩ лМБУУ НПЦЕФ ВЩФШ ПРЙУБО ЧОХФТЙ ДТХЗПЗП ЛМБУУБ. ч ЬФПН УМХЮБЕ ПВМБУФШ ЧЙДЙНПУФЙ ЙНЕО ЧОХФТЕООЕЗП ЛМБУУБ ЕЗП Й ПВЭЙИ ЙНЕО ПЗТБОЙЮЙЧБЕФУС ПИЧБФЩЧБАЭЙН ЛМБУУПН. ъБ ЙУЛМАЮЕОЙЕН ЬФПЗП ПЗТБОЙЮЕОЙС ДПРХУФЙНП, ЮФПВЩ ЧОХФТЕООЙК ЛМБУУ ХЦЕ ВЩМ ПРЙУБО ЧОЕ ПИЧБФЩЧБАЭЕЗП ЛМБУУБ. пРЙУБОЙЕ ПДОПЗП ЛМБУУБ ЧОХФТЙ ДТХЗПЗП ОЕ ЧМЙСЕФ ОБ РТБЧЙМБ ДПУФХРБ Л ЪБЛТЩФЩН ЮМЕОБН Й ОЕ РПНЕЭБЕФ ЖХОЛГЙЙ ЮМЕОЩ ЧОХФТЕООЕЗП ЛМБУУБ Ч ПВМБУФШ ЧЙДЙНПУФЙ ПИЧБФЩЧБАЭЕЗП ЛМБУУБ. оБРТЙНЕТ: int x; class enclose /* ПИЧБФЩЧБАЭЙК */ { int x; class inner { int y; f () { x=1 } ... }; g (inner*); ... }; int inner; /* ЧМПЦЕООЩК */ enclose.g (inner* p) { ... } ч ЬФПН РТЙНЕТЕ x Ч f УУЩМБЕФУС ОБ x, ПРЙУБООЩК РЕТЕД ЛМБУУПН enclose. рПУЛПМШЛХ y СЧМСЕФУС ЪБЛТЩФЩН ЮМЕОПН inner, g ОЕ НПЦЕФ ЕЗП ЙУРПМШЪПЧБФШ. рПУЛПМШЛХ g СЧМСЕФУС ЮМЕОПН enclose, ЙНЕОБ, ЙУРПМШЪПЧБООЩЕ Ч g, УЮЙФБАФУС ОБИПДСЭЙНЙУС Ч ПВМБУФЙ ЧЙДЙНПУФЙ ЛМБУУБ enclose. рПЬФПНХ inner Ч ПРЙУБОЙЙ РБТБНЕФТПЧ g ПФОПУЙФУС Л ПИЧБЮЕООПНХ ФЙРХ inner, Б ОЕ Л int. 8.6 йОЙГЙБМЙЪБГЙС пРЙУБОЙЕ НПЦЕФ ЪБДБЧБФШ ОБЮБМШОПЕ ЪОБЮЕОЙЕ ПРЙУЩЧБЕНПЗП ЙДЕОФЙЖЙЛБФПТБ. йОЙГЙБМЙЪБФПТХ РТЕДЫЕУФЧХЕФ =, Й ПО УПУФПЙФ ЙЪ ЧЩТБЦЕОЙС ЙМЙ УРЙУЛБ ЪОБЮЕОЙК, ЪБЛМАЮЕООПЗП Ч ЖЙЗХТОЩЕ УЛПВЛЙ. ЙОЙГЙБМЙЪБФПТ: = expression = { УРЙУПЛ_ЙОЙГЙБМЙЪБФПТПЧ } = { УРЙУПЛ_ЙОЙГЙБМЙЪБФПТПЧ , } ( УРЙУПЛ_ЧЩТБЦЕОЙК ) УРЙУПЛ_ЙОЙГЙБМЙЪБФПТПЧ : ЧЩТБЦЕОЙЕ УРЙУПЛ_ЙОЙГЙБМЙЪБФПТПЧ , УРЙУПЛ_ЙОЙГЙБМЙЪБФПТПЧ { УРЙУПЛ_ЙОЙГЙБМЙЪБФПТПЧ } чУЕ ЧЩТБЦЕОЙС Ч ЙОЙГЙБМЙЪБФПТЕ УФБФЙЮЕУЛПК ЙМЙ ЧОЕЫОЕК РЕТЕНЕООПК ДПМЦОЩ ВЩФШ ЛПОУФБОФОЩНЙ ЧЩТБЦЕОЙСНЙ, ЛПФПТЩЕ ПРЙУБОЩ Ч #15, ЙМЙ ЧЩТБЦЕОЙСНЙ, ЛПФПТЩЕ УЧПДСФУС Л БДТЕУБН ТБОЕЕ ПРЙУБООЩИ РЕТЕНЕООЩИ, ЧПЪНПЦОП УП УНЕЭЕОЙЕН ОБ ЛПОУФБОФОПЕ ЧЩТБЦЕОЙЕ. бЧФПНБФЙЮЕУЛЙЕ Й ТЕЗЙУФТПЧЩЕ РЕТЕНЕООЩЕ НПЗХФ ЙОЙГЙБМЙЪЙТПЧБФШУС МАВЩНЙ ЧЩТБЦЕОЙСНЙ, ЧЛМАЮБАЭЙНЙ ЛПОУФБОФЩ, ТБОЕЕ ПРЙУБООЩЕ РЕТЕНЕООЩЕ Й ЖХОЛГЙЙ. зБТБОФЙТХЕФУС, ЮФП ОЕЙОЙГЙБМЙЪЙТПЧБООЩЕ УФБФЙЮЕУЛЙЕ Й ЧОЕЫОЙЕ РЕТЕНЕООЩЕ РПМХЮБАФ Ч ЛБЮЕУФЧЕ ОБЮБМШОПЗП ЪОБЮЕОЙС "РХУФПЕ ЪОБЮЕОЙЕ"*. лПЗДБ ЙОЙГЙБМЙЪБФПТ РТЙНЕОСЕФУС Л УЛБМСТХ (ХЛБЪБФЕМШ ЙМЙ ПВЯЕЛФ БТЙЖНЕФЙЮЕУЛПЗП ФЙРБ), ПО УПУФПЙФ ЙЪ ПДОПЗП ЧЩТБЦЕОЙС, ЧПЪНПЦОП, ЪБЛМАЮЕООПЗП Ч ЖЙЗХТОЩЕ УЛПВЛЙ. оБЮБМШОПЕ ЪОБЮЕОЙЕ ПВЯЕЛФБ ОБИПДЙФУС ЙЪ ЧЩТБЦЕОЙС; ЧЩРПМОСАФУС ФЕ ЦЕ РТЕПВТБЪПЧБОЙС, ЮФП Й РТЙ РТЙУЧБЙЧБОЙЙ. ъБНЕФШФЕ, ЮФП РПУЛПМШЛХ () ОЕ СЧМСЕФУС ЙОЙГЙБМЙЪБФПТПН, ФП "X a();" СЧМСЕФУС ОЕ ПРЙУБОЙЕН ПВЯЕЛФБ ЛМБУУБ X, Б ПРЙУБОЙЕН ЖХОЛГЙЙ, ОЕ РПМХЮБАЭЕК ЪОБЮЕОЙК Й ЧПЪЧТБЭБАЭЕК X. 8.6.1 уРЙУПЛ ЙОЙГЙБМЙЪБФПТПЧ лПЗДБ ПРЙУБООБС РЕТЕНЕООБС СЧМСЕФУС УПУФБЧОПК (ЛМБУУ ЙМЙ НБУУЙЧ), ФП ЙОЙГЙБМЙЪБФПТ НПЦЕФ УПУФПСФШ ЙЪ ЪБЛМАЮЕООПЗП Ч ЖЙЗХТОЩЕ УЛПВЛЙ, ТБЪДЕМЕООПЗП ЪБРСФЩНЙ УРЙУЛБ ЙОЙГЙБМЙЪБФПТПЧ ДМС ЮМЕОПЧ УПУФБЧОПЗП ПВЯЕЛФБ, Ч РПТСДЛЕ ЧПЪТБУФБОЙС ЙОДЕЛУБ ЙМЙ РП РПТСДЛХ ЮМЕОПЧ. еУМЙ НБУУЙЧ УПДЕТЦЙФ УПУФБЧОЩЕ РПДПВЯЕЛФЩ, ФП ЬФП РТБЧЙМП ТЕЛХТУЙЧОП РТЙНЕОСЕФУС Л ЮМЕОБН УПУФБЧОПЗП РПДПВЯЕЛФБ. еУМЙ ЙОЙГЙБМЙЪБФПТПЧ Ч УРЙУЛЕ НЕОШЫЕ, ЮЕН ЮМЕОПЧ Ч УПУФБЧОПН РПДПВЯЕЛФЕ, ФП УПУФБЧОПК РПДПВЯЕЛФ ДПРПМОСЕФУС ОХМСНЙ. жЙЗХТОЩЕ УЛПВЛЙ НПЗХФ ПРХУЛБФШУС УМЕДХАЭЙН ПВТБЪПН. еУМЙ ЙОЙГЙБМЙЪБФПТ ОБЮЙОБЕФУС У МЕЧПК ЖЙЗХТОПК УЛПВЛЙ, ФП УМЕДХАЭЙК ЪБ ОЕК УРЙУПЛ ЙОЙГЙБМЙЪБФПТПЧ ЙОЙГЙБМЙЪЙТХЕФ ЮМЕОЩ УПУФБЧОПЗП ПВЯЕЛФБ; ОБМЙЮЙЕ ЮЙУМБ ЙОЙГЙБМЙЪБФПТПЧ, ВПМШЫЕЗП, ЮЕН ЮЙУМП ЮМЕОПЧ, УЮЙФБЕФУС ПЫЙВПЮОЩН. еУМЙ, ПДОБЛП, ЙОЙГЙБМЙЪБФПТ ОЕ ОБЮЙОБЕФУС У МЕЧПК ЖЙЗХТОПК УЛПВЛЙ, ФП ЙЪ УРЙУЛБ ВЕТХФУС ФПМШЛП ЬМЕНЕОФЩ, ДПУФБФПЮОЩЕ ДМС УПРПУФБЧМЕОЙС ЮМЕОБН УПУФБЧОПЗП ПВЯЕЛФБ, ЮБУФША ЛПФПТПЗП СЧМСЕФУС ФЕЛХЭЙК УПУФБЧОПК ПВЯЕЛФ. оБРТЙНЕТ, int x[] = { 1, 3, 5 }; ПРЙУЩЧБЕФ Й ЙОЙГЙБМЙЪЙТХЕФ x ЛБЛ ПДОПНЕТОЩК НБУУЙЧ, ЙНЕАЭЙК ФТЙ ЮМЕОБ, РПУЛПМШЛХ ТБЪНЕТ ОЕ ВЩМ ХЛБЪБО Й ДБОП ФТЙ ЙОЙГЙБМЙЪБФПТБ. float y[4][3] = { { 1, 3, 5 }, { 2, 4, 6 }, { 3, 5, 7 } }; СЧМСЕФУС РПМОПУФША УОБВЦЕООПК ЛЧБДТБФОЩНЙ УЛПВЛБНЙ ЙОЙГЙБМЙЪБГЙЕК: 1,3 Й 5 ЙОЙГЙБМЙЪЙТХАФ РЕТЧЩК ТСД НБУУЙЧБ y[0], Б ЙНЕООП, y[0][2]. бОБМПЗЙЮОП, УМЕДХАЭЙЕ ДЧЕ УФТПЛЙ ЙОЙГЙБМЙЪЙТХАФ y[1] Й y[2]. йОЙГЙБМЙЪБФПТ ЪБЛБОЮЙЧБЕФУС ТБОШЫЕ, РПЬФПНХ y[3] ЙОЙГЙБМЙЪЙТХЕФУС ЪОБЮЕОЙЕН 0. ч ФПЮОПУФЙ ФПФ ЦЕ ЬЖЖЕЛФ НПЦЕФ ВЩФШ ДПУФЙЗОХФ У РПНПЭША float y[4][3] = { 1, 3, 5, 2, 4, 6, 3, 5, 7 }; йОЙГЙБМЙЪБФПТ ДМС y ОБЮЙОБЕФУС У МЕЧПК ЖЙЗХТОПК УЛПВЛЙ, ОП ОЕ ОБЮЙОБЕФУС У ОЕЕ ЙОЙГЙБМЙЪБФПТ ДМС y[0], РПЬФПНХ ЙУРПМШЪХЕФУС ФТЙ ЪОБЮЕОЙС ЙЪ УРЙУЛБ. бОБМПЗЙЮОП, УМЕДХАЭЙЕ ФТЙ ХУРЕЫОП ЙУРПМШЪХАФУС ДМС y[1] Й УМЕДХАЭЙЕ ФТЙ ДМС y[2]. float y[4][3] = { { 1 }, { 2 }, { 3 }, { 4 } }; ЙОЙГЙБМЙЪЙТХЕФ РЕТЧЩК УФПМВЕГ y (ТБУУНБФТЙЧБЕНПЗП ЛБЛ ДЧХНЕТОЩК НБУУЙЧ) Й ПУФБЧМСЕФ ПУФБМШОЩЕ ЬМЕНЕОФЩ ОХМСНЙ. 8.6.2 лМБУУПЧЩЕ ПВЯЕЛФЩ пВЯЕЛФ У ЪБЛТЩФЩНЙ ЮМЕОБНЙ ОЕ НПЦЕФ ВЩФШ ЙОЙГЙБМЙЪЙТПЧБО У РПНПЭША РТПУФПЗП РТЙУЧБЙЧБОЙС, ЛБЛ ЬФП ПРЙУЩЧБМПУШ ЧЩЫЕ; ЬФП ЦЕ ПФОПУЙФУС Л ПВЯЕЛФХ ПВЯЕДЙОЕОЙЕ. еУМЙ ЛМБУУ ЙНЕЕФ ЛПОУФТХЛФПТ, ОЕ РПМХЮБАЭЙК ЪОБЮЕОЙК, ФП ЬФПФ ЛПОУФТХЛФПТ ЙУРПМШЪХЕФУС ДМС ПВЯЕЛФПЧ, ЛПФПТЩЕ СЧОП ОЕ ЙОЙГЙБМЙЪЙТПЧБОЩ. рБТБНЕФТЩ ДМС ЛПОУФТХЛФПТБ НПЗХФ ФБЛЦЕ ВЩФШ РТЕДУФБЧМЕОЩ Ч ЧЙДЕ ЪБЛМАЮЕООПЗП Ч ЛТХЗМЩЕ УЛПВЛЙ УРЙУЛБ. оБРТЙНЕТ: struct complex { float re; float im; complex (float r,float i) { re=r; im=i; } complex (float r) { re=r; im=0; } }; complex zz (1,2.3); complex* zp = new complex (1,2.3); йОЙГЙБМЙЪБГЙС НПЦЕФ ВЩФШ ФБЛЦЕ ЧЩРПМОЕОБ У РПНПЭША СЧОПЗП РТЙУЧБЙЧБОЙС; РТЕПВТБЪПЧБОЙС РТПЙЪЧПДСФУС. оБРТЙНЕТ, complex zz1 = complex (1,2.3); complex zz2 = complex (123); complex zz3 = 123; complex zz4 = zz3; еУМЙ ЛПОУФТХЛФПТ УУЩМБЕФУС ОБ ПВЯЕЛФ УЧПЕЗП УПВУФЧЕООПЗП ЛМБУУБ, ФП ПО ВХДЕФ ЧЩЪЩЧБФШУС РТЙ ЙОЙГЙБМЙЪБГЙЙ ПВЯЕЛФБ ДТХЗЙН ПВЯЕЛФПН ЬФПЗП ЛМБУУБ, ОП ОЕ РТЙ ЙОЙГЙБМЙЪБГЙЙ ПВЯЕЛФБ ЛПОУФТХЛФПТПН. пВЯЕЛФ ЛМБУУБ, ЙНЕАЭЕЗП ЛПОУФТХЛФПТЩ, НПЦЕФ ВЩФШ ЮМЕОПН УПУФБЧОПЗП ПВЯЕЛФБ ФПМШЛП ЕУМЙ ПО УБН ОЕ ЙНЕЕФ ЛПОУФТХЛФПТБ ЙМЙ ЕУМЙ ЕЗП ЛПОУФТХЛФПТЩ ОЕ ЙНЕАФ РБТБНЕФТПЧ. ч РПУМЕДОЕН УМХЮБЕ ЛПОУФТХЛФПТ ЧЩЪЩЧБЕФУС РТЙ УПЪДБОЙЙ УПУФБЧОПЗП ПВЯЕЛФБ. еУМЙ ЮМЕО УПУФБЧОПЗП ПВЯЕЛФБ СЧМСЕФУС ЮМЕОПН ЛМБУУБ У ДЕУФТХЛФПТБНЙ, ФП ЬФПФ ДЕУФТХЛФПТ ЧЩЪЩЧБЕФУС РТЙ ХОЙЮФПЦЕОЙЙ УПУФБЧОПЗП ПВЯЕЛФБ. 8.6.3 уУЩМЛЙ лПЗДБ РЕТЕНЕООБС ПРЙУБОБ ЛБЛ T&, ЮФП ЕУФШ "УУЩМЛБ ОБ ФЙР T", ПОБ НПЦЕФ ВЩФШ ЙОЙГЙБМЙЪЙТПЧБОБ ЙМЙ ХЛБЪБФЕМЕН ОБ ФЙР T, ЙМЙ ПВЯЕЛФПН ФЙРБ T. ч РПУМЕДОЕН УМХЮБЕ ВХДЕФ ОЕСЧОП РТЙНЕОЕОБ ПРЕТБГЙС ЧЪСФЙС БДТЕУБ &. оБРТЙНЕТ: int i; int& r1 = i; int& r2 = &i; й r1 Й r2 ВХДХФ ХЛБЪЩЧБФШ ОБ i. пВТБВПФЛБ ЙОЙГЙБМЙЪБГЙЙ УУЩМЛЙ ПЮЕОШ УЙМШОП ЪБЧЙУЙФ ПФ ФПЗП, ЮФП ЕК РТЙУЧБЙЧБЕФУС. лБЛ ПРЙУЩЧБМПУШ Ч #7.1, УУЩМЛБ ОЕСЧОП РЕТЕБДТЕУХЕФУС РТЙ ЕЕ ЙУРПМШЪПЧБОЙЙ. оБРТЙНЕТ r1 = r2; ПЪОБЮБЕФ ЛПРЙТПЧБОЙЕ ГЕМПЗП, ОБ ЛПФПТПЕ ХЛБЪЩЧБЕФ r2, Ч ГЕМПЕ, ОБ ЛПФПТПЕ ХЛБЪЩЧБЕФ r1. уУЩМЛБ ДПМЦОБ ВЩФШ ЙОЙГЙБМЙЪЙТПЧБОБ. фБЛЙН ПВТБЪПН, УУЩМЛХ НПЦОП УЮЙФБФШ ЙНЕОЕН ПВЯЕЛФБ. юФПВЩ РПМХЮЙФШ ХЛБЪБФЕМШ pp, ПВПЪОБЮБАЭЙК ФПФ ПВЯЕЛФ, ЮФП Й УУЩМЛБ rr, НПЦОП ОБРЙУБФШ pp=&rr. ьФП ВХДЕФ РТПЙОФЕТРТЕФЙТПЧБОП ЛБЛ pp=&*rr. еУМЙ ЙОЙГЙБМЙЪБФПТ ДМС УУЩМЛЙ ОБ ФЙР T ОЕ СЧМСЕФУС БДТЕУОЩН ЧЩТБЦЕОЙЕН, ФП ВХДЕФ УПЪДБО Й ЙОЙГЙБМЙЪЙТПЧБО У РПНПЭША РТБЧЙМ ЙОЙГЙБМЙЪБГЙЙ ПВЯЕЛФ ФЙРБ T. фПЗДБ ЪОБЮЕОЙЕН УУЩМЛЙ УФБОЕФ БДТЕУ ПВЯЕЛФБ. чТЕНС ЦЙЪОЙ ПВЯЕЛФБ, УПЪДБООПЗП ФБЛЙН УРПУПВПН, ВХДЕФ Ч ФПК ПВМБУФЙ ЧЙДЙНПУФЙ, Ч ЛПФПТПК ПО УПЪДБО. оБРТЙНЕТ: double& rr = 1; ДПРХУФЙНП, Й rr ВХДЕФ ХЛБЪЩЧБФШ ОБ ПВЯЕЛФ ФЙРБ double, Ч ЛПФПТПН ИТБОЙФУС ЪОБЮЕОЙЕ 1.0. уУЩМЛЙ ПУПВЕООП РПМЕЪОЩ Ч ЛБЮЕУФЧЕ ФЙРПЧ РБТБНЕФТПЧ. 8.6.4 нБУУЙЧЩ УЙНЧПМПЧ рПУМЕДОСС УПЛТБЭЕООБС ЪБРЙУШ РПЪЧПМСЕФ ЙОЙГЙБМЙЪЙТПЧБФШ УФТПЛПК НБУУЙЧ ДБООЩИ ФЙРБ char. ч ЬФПН УМХЮБЕ РПУМЕДПЧБФЕМШОЩЕ УЙНЧПМЩ УФТПЛЙ ЙОЙГЙБМЙЪЙТХАФ ЮМЕОЩ НБУУЙЧБ. оБРТЙНЕТ: char msg[] = "Syntax error on line %d\n"; ДЕНПОУФТЙТХЕФ НБУУЙЧ УЙНЧПМПЧ, ЮМЕОЩ ЛПФПТПЗП ЙОЙГЙБМЙЪЙТПЧБОЩ УФТПЛПК. 8.7 йНЕОБ ФЙРПЧ йОПЗДБ (ДМС ОЕСЧОПЗП ЪБДБОЙС РТЕПВТБЪПЧБОЙС ФЙРПЧ Й Ч ЛБЮЕУФЧЕ РБТБНЕФТБ sizeof ЙМЙ new) ОХЦОП ЙУРПМШЪПЧБФШ ЙНС ФЙРБ ДБООЩИ. ьФП ЧЩРПМОСЕФУС РТЙ РПНПЭЙ "ЙНЕОЙ ФЙРБ" ЛПФПТПЕ РП УХФЙ СЧМСЕФУС ПРЙУБОЙЕН ДМС ПВЯЕЛФБ ЬФПЗП ФЙРБ, Ч ЛПФПТПН ПРХЭЕОП ЙНС ПВЯЕЛФБ. ЙНС_ФЙРБ: УРЕГЙЖЙЛБФПТ_ФЙРБ БВУФТБЛФОЩК_ПРЙУБФЕМШ БВУФТБЛФОЩК_ПРЙУБФЕМШ : РХУФПК * БВУФТБЛФОЩК_ПРЙУБФЕМШ БВУФТБЛФОЩК_ПРЙУБФЕМШ ( УРЙУПЛП_РЙУБФЕМЕК_РБТБНЕФТПЧ) БВУФТБЛФОЩК_ПРЙУБФЕМШ [ ЛПОУФБОФОПЕ_ЧЩТБЦЕОЙЕ opt ] ( БВУФТБЛФОЩК_ПРЙУБФЕМШ ) сЧМСЕФУС ЧПЪНПЦОЩН ЙДЕОФЙЖЙГЙТПЧБФШ РПМПЦЕОЙЕ Ч БВУФТБЛФОПН_ПРЙУБФЕМЕ, ЗДЕ ДПМЦЕО ВЩМ ВЩ РПСЧМСФШУС ЙДЕОФЙЖЙЛБФПТ Ч УМХЮБЕ, ЕУМЙ ВЩ ЛПОУФТХЛГЙС ВЩМБ ПРЙУБФЕМЕН Ч ПРЙУБОЙЙ. фПЗДБ ЙНЕОПЧБООЩК ФЙР СЧМСЕФУС ФЕН ЦЕ, ЮФП Й ФЙР РТЕДРПМБЗБЕНПЗП ЙДЕОФЙЖЙЛБФПТБ. оБРТЙНЕТ: int int * int *[3] int *() int (*)() ЙНЕОХЕФ, УППФЧЕФУФЧЕООП, ФЙРЩ "ГЕМПЕ", "ХЛБЪБФЕМШ ОБ ГЕМПЕ", "ХЛБЪБФЕМШ ОБ НБУУЙЧ ЙЪ ФТЕИ ГЕМЩИ", "ЖХОЛГЙС, ЧПЪЧТБЭБАЭБС ХЛБЪБФЕМШ ОБ ЖХОЛГЙА, ЧПЪЧТБЭБАЭХА ГЕМПЕ" Й "ХЛБЪБФЕМШ ОБ ГЕМПЕ". рТПУФПЕ ЙНС ФЙРБ ЕУФШ ЙНС ФЙРБ, УПУФПСЭЕЕ ЙЪ ПДОПЗП ЙДЕОФЙЖЙЛБФПТБ ЙМЙ ЛМАЮЕЧПЗП УМПЧБ. РТПУФПЕ_ЙНС_ФЙРБ: typedef-ЙНС char short int long unsigned float double пОЙ ЙУРПМШЪХАФУС Ч БМШФЕТОБФЙЧОПН УЙОФБЛУЙУЕ ДМС РТЕПВТБЪПЧБОЙС ФЙРПЧ. оБРТЙНЕТ: (double) a НПЦЕФ ВЩФШ ФБЛЦЕ ЪБРЙУБОП ЛБЛ double (a) 8.8 пРТЕДЕМЕОЙЕ ФЙРБ typedef пРЙУБОЙС, УПДЕТЦБЭЙЕ УРЕГЙЖЙЛБФПТ_ПРЙУБОЙС typedef, ПРТЕДЕМСАФ ЙДЕОФЙЖЙЛБФПТЩ, ЛПФПТЩЕ РПЪДОЕЕ НПЗХФ ЙУРПМШЪПЧБФШУС ФБЛ, ЛБЛ ЕУМЙ ВЩ ПОЙ ВЩМЙ ЛМАЮЕЧЩНЙ УМПЧБНЙ ФЙРБ, ЙНЕОХАЭЕЕ ПУОПЧОЩЕ ЙМЙ РТПЙЪЧПДОЩЕ ФЙРЩ. typedef-ЙНС: ЙДЕОФЙЖЙЛБФПТ чОХФТЙ ПВМБУФЙ ЧЙДЙНПУФЙ ПРЙУБОЙС, УПДЕТЦБЭЕЗП typedef, ЛБЦДЩК ЙДЕОФЙЖЙЛБФПТ, ЧПЪОЙЛБАЭЙК ЛБЛ ЮБУФШ ЛБЛПЗП-МЙВП ПРЙУБФЕМС, УФБОПЧЙФУС Ч ЬФПН НЕУФЕ УЙОФБЛУЙЮЕУЛЙ ЬЛЧЙЧБМЕОФОЩН ЛМАЮЕЧПНХ УМПЧХ ФЙРБ, ЛПФПТПЕ ЙНЕОХЕФ ФЙР, БУУПГЙЙТПЧБООЩК У ЙДЕОФЙЖЙЛБФПТПН ФБЛЙН ПВТБЪПН, ЛБЛ ПРЙУЩЧБЕФУС Ч #8.4. йНС ЛМБУУБ ЙМЙ РЕТЕЮЙУМЕОЙС ФБЛЦЕ СЧМСЕФУС typedef-ЙНЕОЕН. оБРТЙНЕТ, РПУМЕ typedef int MILES, *KLICKSP; struct complex { double re, im; }; ЛБЦДБС ЙЪ ЛПОУФТХЛГЙК MILES distance; extern KLICKSP metricp; complex z, *zp; СЧМСЕФУС ДПРХУФЙНЩН ПРЙУБОЙЕН; distance ЙНЕЕФ ФЙР int, metricp ЙНЕЕФ ФЙР "ХЛБЪБФЕМШ ОБ int". typedef ОЕ ЧЧПДЙФ ОПЧЩИ ФЙРПЧ, ОП ФПМШЛП УЙОПОЙНЩ ДМС ФЙРПЧ, ЛПФПТЩЕ НПЗМЙ ВЩ ВЩФШ ПРТЕДЕМЕОЩ ДТХЗЙН РХФЕН. фБЛ Ч РТЙЧЕДЕООПН ЧЩЫЕ РТЙНЕТЕ distance ТБУУНБФТЙЧБЕФУС ЛБЛ ЙНЕАЭБС Ч ФПЮОПУФЙ ФПФ ЦЕ ФЙР, ЮФП Й МАВПК ДТХЗПК int ПВЯЕЛФ. оП ПРЙУБОЙЕ ЛМБУУБ ЧЧПДЙФ ОПЧЩК ФЙР. оБРТЙНЕТ: struct X { int a; }; struct Y { int a; }; X a1; Y a2; int a3; ПРЙУЩЧБЕФ ФТЙ РЕТЕНЕООЩИ ФТЕИ ТБЪМЙЮОЩИ ФЙРПЧ. пРЙУБОЙЕ ЧЙДБ ПРЙУБОЙЕ_ЙНЕОЙ: БЗТЕЗ ЙДЕОФЙЖЙЛБФПТ ; enum ЙДЕОФЙЖЙЛБФПТ ; ПРТЕДЕМСЕФ ФП, ЮФП ЙДЕОФЙЖЙЛБФПТ СЧМСЕФУС ЙНЕОЕН ОЕЛПФПТПЗП (ЧПЪНПЦОП, ЕЭЕ ОЕ ПРТЕДЕМЕООПЗП) ЛМБУУБ ЙМЙ РЕТЕЮЙУМЕОЙС. фБЛЙЕ ПРЙУБОЙС РПЪЧПМСАФ ПРЙУЩЧБФШ ЛМБУУЩ, УУЩМБАЭЙИУС ДТХЗ ОБ ДТХЗБ. оБРТЙНЕТ: class vector; class matrix { ... friend matrix operator* (matrix&,vector&); }; class vector { ... friend matrix operator* (matrix&,vector&); }; 8.9 рЕТЕЗТХЦЕООЩЕ ЙНЕОБ ЖХОЛГЙК ч ФЕИ УМХЮБСИ, ЛПЗДБ ДМС ПДОПЗП ЙНЕОЙ ПРТЕДЕМЕОП ОЕУЛПМШЛП (ТБЪМЙЮОЩИ) ПРЙУБОЙК ЖХОЛГЙК, ЬФП ЙНС ОБЪЩЧБЕФУС РЕТЕЗТХЦЕООЩН. рТЙ ЙУРПМШЪПЧБОЙЙ ЬФПЗП ЙНЕОЙ РТБЧЙМШОБС ЖХОЛГЙС ЧЩВЙТБЕФУС У РПНПЭША УТБЧОЕОЙС ФЙРПЧ ЖБЛФЙЮЕУЛЙИ РБТБНЕФТПЧ У ФЙРБНЙ РБТБНЕФТПЧ Ч ПРЙУБОЙСИ ЖХОЛГЙК. л РЕТЕЗТХЦЕООЩН ЙНЕОБН ОЕРТЙНЕОЙНБ ПРЕТБГЙС РПМХЮЕОЙС БДТЕУБ &. йЪ ПВЩЮОЩИ БТЙЖНЕФЙЮЕУЛЙИ РТЕПВТБЪПЧБОЙК, ПРТЕДЕМЕООЩИ Ч #6.6, ДМС ЧЩЪПЧБ РЕТЕЗТХЦЕООПК ЖХОЛГЙЙ ЧЩРПМОСАФУС ФПМШЛП char->short->int, int->double, int->long Й float->double. дМС ФПЗП, ЮФПВЩ РЕТЕЗТХЪЙФШ ЙНС ЖХОЛГЙЙ ОЕ-ЮМЕОБ ПРЙУБОЙЕ overload ДПМЦОП РТЕДЫЕУФЧПЧБФШ МАВПНХ ПРЙУБОЙА ЖХОЛГЙЙ; УН. #8.2. оБРТЙНЕТ: overload abs; int abs (int); double abs (double); лПЗДБ ЧЩЪЩЧБЕФУС РЕТЕЗТХЦЕООПЕ ЙНС, РП РПТСДЛХ РТПЙЪЧПДЙФУС УЛБОЙТПЧБОЙЕ УРЙУЛБ ЖХОЛГЙК ДМС ОБИПЦДЕОЙС ФПК, ЛПФПТБС НПЦЕФ ВЩФШ ЧЩЪЧБОБ. оБРТЙНЕТ, abs(12) ЧЩЪЩЧБЕФ abs(int), Б abs(12.0) ВХДЕФ ЧЩЪЩЧБФШ abs(double). еУМЙ ВЩ ВЩМ ЪБТЕЪЕТЧЙТПЧБО РПТСДПЛ ЧЩЪПЧБ, ФП ПВБ ПВТБЭЕОЙС ЧЩЪЧБМЙ ВЩ abs(double). еУМЙ Ч УМХЮБЕ ЧЩЪПЧБ РЕТЕЗТХЦЕООПЗП ЙНЕОЙ У РПНПЭША ЧЩЫЕХЛБЪБООПЗП НЕФПДБ ОЕ ОБКДЕОП ОЙ ПДОПК ЖХОЛГЙЙ, Й ЕУМЙ ЖХОЛГЙС РПМХЮБЕФ РБТБНЕФТ ФЙРБ ЛМБУУБ, ФП ЛПОУФТХЛФПТЩ ЛМБУУПЧ РБТБНЕФТПЧ (Ч ЬФПН УМХЮБЕ УХЭЕУФЧХЕФ ЕДЙОУФЧЕООЩК ОБВПТ РТЕПВТБЪПЧБОЙК, ДЕМБАЭЙК ЧЩЪПЧ ДПРХУФЙНЩН) РТЙНЕОСАФУС ОЕСЧОЩН ПВТБЪПН. оБРТЙНЕТ: class X { ... X (int); }; class Y { ... Y (int); }; class Z { ... Z (char*); }; overload int f (X), f (Y); overload int g (X), g (Y); f (1); /* ОЕЧЕТОП: ОЕПДОПЪОБЮОПУФШ f(X(1)) ЙМЙ f(Y(1)) */ g (1); /* g(X(1)) */ g ("asdf"); /* g(Z("asdf")) */ чУЕ ЙНЕОБ ЖХОЛГЙК ПРЕТБГЙК СЧМСАФУС БЧФПНБФЙЮЕУЛЙ РЕТЕЗТХЦЕООЩНЙ. 8.10 пРЙУБОЙЕ РЕТЕЮЙУМЕОЙС рЕТЕЮЙУМЕОЙС СЧМСАФУС int У ЙНЕОПЧБООЩНЙ ЛПОУФБОФБНЙ. enum_УРЕГЙЖЙЛБФПТ: enum ЙДЕОФЙЖЙЛБФПТ opt { enum_УРЙУПЛ } enum_УРЙУПЛ: РЕТЕЮЙУМЙФЕМШ enum_УРЙУПЛ, РЕТЕЮЙУМЙФЕМШ РЕТЕЮЙУМЙФЕМШ: ЙДЕОФЙЖЙЛБФПТ ЙДЕОФЙЖЙЛБФПТ = ЛПОУФБОФОПЕ_ЧЩТБЦЕОЙЕ йДЕОФЙЖЙЛБФПТЩ Ч enum-УРЙУЛЕ ПРЙУБОЩ ЛБЛ ЛПОУФБОФЩ Й НПЗХФ РПСЧМСФШУС ЧП ЧУЕИ НЕУФБИ, ЗДЕ ФТЕВХАФУС ЛПОУФБОФЩ. еУМЙ ОЕ РПСЧМСЕФУС ОЙ ПДОПЗП РЕТЕЮЙУМЙФЕМС У =, ФП ЪОБЮЕОЙС ЧУЕИ УППФЧЕФУФЧХАЭЙИ ЛПОУФБОФ ОБЮЙОБАФУС У 0 Й ЧПЪТБУФБАФ ОБ 1 РП НЕТЕ ЮФЕОЙС ПРЙУБОЙС УМЕЧБ ОБРТБЧП. рЕТЕЮЙУМЙФЕМШ У = ДБЕФ БУУПГЙЙТПЧБООПНХ У ОЙН ЙДЕОФЙЖЙЛБФПТХ ХЛБЪБООПЕ ЪОБЮЕОЙЕ; РПУМЕДХАЭЙЕ ЙДЕОФЙЖЙЛБФПТЩ РТПДПМЦБАФ РТПЗТЕУУЙА ПФ РТЙУЧПЕОООПЗП ЪОБЮЕОЙС. йНЕОБ РЕТЕЮЙУМЙФЕМЕК ДПМЦОЩ ВЩФШ ПФМЙЮОЩНЙ ПФ ЙНЕО ПВЩЮОЩИ РЕТЕНЕООЩИ. ъОБЮЕОЙС РЕТЕЮЙУМЙФЕМЕК ОЕ ПВСЪБФЕМШОП ДПМЦОЩ ВЩФШ ТБЪМЙЮОЩНЙ. тПМШ ЙДЕОФЙЖЙЛБФПТБ Ч УРЕГЙЖЙЛБФПТЕ РЕТЕЮЙУМЕОЙС enum_УРЕГЙЖЙЛБФПТ РПМОПУФША БОБМПЗЙЮОБ ТПМЙ ЙНЕОЙ ЛМБУУБ; ПО ЙНЕОХЕФ ПРТЕДЕМЕООЩК ОХФЕТБФПТ. оБРТЙНЕТ: enum color { chartreuse, burgundy, claret=20, winedark }; ... color *cp, col; ... col = claret; cp = &col; ... if (*cp == burgundy) ... ДЕМБЕФ color ЙНЕОЕН ФЙРБ, ПРЙУЩЧБАЭЕЗП ТБЪМЙЮОЩЕ ГЧЕФБ, Й ЪБФЕН ПРЙУЩЧБЕФ cp ЛБЛ ХЛБЪБФЕМШ ОБ ПВЯЕЛФ ЬФПЗП ФЙРБ. чПЪНПЦОЩЕ ЪОБЮЕОЙС ЙЪЧМЕЛБАФУС ЙЪ НОПЦЕУФЧБ { 0, 1, 20, 21 }. 8.11 пРЙУБОЙЕ AsН пРЙУБОЙЕ Asm ЙНЕЕФ ЧЙД asm (УФТПЛБ); уНЩУМ ПРЙУБОЙС asm ОЕ ПРТЕДЕМЕО. пВЩЮОП ПОП ЙУРПМШЪХЕФУС ДМС РЕТЕДБЮЙ ЙОЖПТНБГЙЙ БУУЕНВМЕТХ ЮЕТЕЪ ЛПНРЙМСФПТ. * ч БОЗМЙКУЛПН "garbage", ПЪОБЮБАЭЕЕ ЪБФЕТФПЕ НЕУФП [РБНСФЙ], Ф.Е. ЕУМЙ РЕТЕНЕООБС ГЕМБС, ФП 0, ЕУМЙ char, ФП '\0', ЕУМЙ ХЛБЪБФЕМШ ОБ ф, ФП (ф*) NULL. оБЪБД | уПДЕТЦБОЙЕ | чРЕТЕД

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT

Соседние файлы в папке Справочное руководство по C++