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

вШСТО уФТБХУФТБР. чЧЕДЕОЙЕ Ч СЪЩЛ уЙ++, рТПЙЪЧПДОЩЕ лМБУУЩ A.noneline { font-family: Arial, Serif; text-decoration: none; } FONT.arial { font-family: Arial, Serif; } TD.arial { font-family: Arial, Serif; } TH.arial { font-family: Arial, Serif; } PRE { font-family: Monospace; color: navy; } SAMP { font-family: Monospace; color: navy; } TT { font-family: Monospace; color: navy; } VAR { font-family: Monospace; color: navy; }

уЕТЧЕТ РПДДЕТЦЙЧБЕФУС

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

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

E-mail: info@citforum.ru уЕТЧЕТ йОЖПТНБГЙПООЩИ фЕИОПМПЗЙК УПДЕТЦЙФ НПТЕ(!) БОБМЙФЙЮЕУЛПК ЙОЖПТНБГЙЙ зМБЧБ 7 рТПЙЪЧПДОЩЕ лМБУУЩ оЕ ОБДП ТБЪНОПЦБФШ ПВЯЕЛФЩ ВЕЪ ОЕПВИПДЙНПУФЙ - х. пЛЛБН ч ЬФПК ЗМБЧЕ ПРЙУЩЧБЕФУС РПОСФЙЕ РТПЙЪЧПДОПЗП ЛМБУУБ Ч C++. рТПЙЪЧПДОЩЕ ЛМБУУЩ ДБАФ РТПУФПК, ЗЙВЛЙК Й ЬЖЖЕЛФЙЧОЩК БРРБТБФ ЪБДБОЙС ДМС ЛМБУУБ БМШФЕТОБФЙЧОПЗП ЙОФЕТЖЕКУБ Й ПРТЕДЕМЕОЙС ЛМБУУБ РПУТЕДУФЧПН ДПВБЧМЕОЙС ЧПЪНПЦОПУФЕК Л ХЦЕ ЙНЕАЭЕНХУС ЛМБУУХ ВЕЪ РЕТЕРТПЗТБННЙТПЧБОЙС ЙМЙ РЕТЕЛПНРЙМСГЙЙ. у РПНПЭША РТПЙЪЧПДОЩИ ЛМБУУПЧ НПЦОП ФБЛЦЕ ПВЕУРЕЮЙФШ ПВЭЙК ЙОФЕТЖЕКУ ДМС ОЕУЛПМШЛЙИ ТБЪМЙЮОЩИ ЛМБУУПЧ ФБЛ, ЮФПВЩ ДТХЗЙЕ ЮБУФЙ РТПЗТБННЩ НПЗМЙ ТБВПФБФШ У ПВЯЕЛФБНЙ ЬФЙИ ЛМБУУПЧ ПДЙОБЛПЧЩН ПВТБЪПН. рТЙ ЬФПН ПВЩЮОП Ч ЛБЦДЩК ПВЯЕЛФ РПНЕЭБЕФУС ЙОЖПТНБГЙС П ФЙРЕ, ЮФПВЩ ЬФЙ ПВЯЕЛФЩ НПЗМЙ ПВТБВБФЩЧБФШУС УППФЧЕФУФЧХАЭЙН ПВТБЪПН Ч УЙФХБГЙСИ, ЛПЗДБ ЙИ ФЙР ОЕМШЪС ХЪОБФШ ЧП ЧТЕНС ЛПНРЙМСГЙЙ. дМС ЬМЕЗБОФОПК Й ОБДЕЦОПК ПВТБВПФЛЙ ФБЛЙИ ДЙОБНЙЮЕУЛЙИ ЪБЧЙУЙНПУФЕК ФЙРПЧ ЙНЕЕФУС РПОСФЙЕ ЧЙТФХБМШОПК ЖХОЛГЙЙ. рП УЧПЕК УХФЙ РТПЙЪЧПДОЩЕ ЛМБУУЩ УХЭЕУФЧХАФ ДМС ФПЗП, ЮФПВЩ ПВМЕЗЮЙФШ РТПЗТБННЙУФХ ЖПТНХМЙТПЧЛХ ПВЭОПУФЙ. 7.1 чЧЕДЕОЙЕ рТЕДУФБЧЙН УЕВЕ РТПГЕУУ ОБРЙУБОЙС ОЕЛПФПТПЗП УТЕДУФЧБ ПВЭЕЗП ОБЪОБЮЕОЙС (ОБРТЙНЕТ, ФЙР УЧСЪБООЩК УРЙУПЛ, ФБВМЙГБ ЙНЕО ЙМЙ РМБОЙТПЧЭЙЛ ДМС УЙУФЕНЩ НПДЕМЙТПЧБОЙС), ЛПФПТПЕ РТЕДОБЪОБЮБЕФУС ДМС ЙУРПМШЪПЧБОЙС НОПЗЙНЙ ТБЪОЩНЙ МАДШНЙ Ч ТБЪМЙЮОЩИ ПВУФПСФЕМШУФЧБИ. пЮЕЧЙДОП, ЮФП Ч ЛБОДЙДБФБИ ОБ ТПМШ ФБЛЙИ УТЕДУФЧ ОЕДПУФБФЛБ ОЕФ, Й ЧЩЗПДЩ ПФ ЙИ УФБОДБТФЙЪБГЙЙ ПЗТПНОЩ. лБЦЕФУС, МАВПК ПРЩФОЩК РТПЗТБННЙУФ ОБРЙУБМ (Й ПФМБДЙМ) ДАЦЙОХ ЧБТЙБОФПЧ ФЙРПЧ НОПЦЕУФЧБ, ФБВМЙГЩ ЙНЕО, УПТФЙТХАЭЕК ЖХОЛГЙЙ Й Ф.Р., ОП ПЛБЪЩЧБЕФУС, ЮФП ФБВМЙГ ЙНЕО ЛБЦДЩК РТПЗТБННЙУФ Й ЛБЦДБС РТПЗТБННБ ЙУРПМШЪХАФ УЧПА ЧЕТУЙА ЬФЙИ РПОСФЙК, ЙЪ-ЪБ ЮЕЗП РТПЗТБННЩ УМЙЫЛПН ФТХДОП ЮЙФБФШ, ФСЦЕМП ПФМБЦЙЧБФШ Й УМПЦОП НПДЙЖЙГЙТПЧБФШ. вПМЕЕ ФПЗП, Ч ВПМШЫПК РТПЗТБННЕ ЧРПМОЕ НПЦЕФ ВЩФШ ОЕУЛПМШЛП ЛПРЙК ЙДЕОФЙЮОЩИ (РПЮФЙ) ЮБУФЕК ЛПДБ ДМС ТБВПФЩ У ФБЛЙНЙ ЖХОДБНЕОФБМШОЩНЙ РПОСФЙСНЙ.

рТЙЮЙОБ ЬФПЗП ИБПУБ ЮБУФЙЮОП УПУФПЙФ Ч ФПН, ЮФП РТЕДУФБЧЙФШ ФБЛЙЕ ПВЭЙЕ РПОСФЙС Ч СЪЩЛЕ РТПЗТБННЙТПЧБОЙС УМПЦОП У ЛПОГЕРФХБМШОПК ФПЮЛЙ ЪТЕОЙС, Б ЮБУФЙЮОП Ч ФПН, ЮФП УТЕДУФЧБ, ПВМБДБАЭЙЕ ДПУФБФПЮОПК ПВЭОПУФША, ОБМБЗБАФ ДПРПМОЙФЕМШОЩЕ ТБУИПДЩ РП РБНСФЙ Й/ЙМЙ РП ЧТЕНЕОЙ, ЮФП ДЕМБЕФ ЙИ ОЕХДПВОЩНЙ ДМС УБНЩИ РТПУФЩИ Й ОБЙВПМЕЕ ОБРТСЦЕООП ЙУРПМШЪХЕНЩИ УТЕДУФЧ (УЧСЪБООЩЕ УРЙУЛЙ, ЧЕЛФПТБ Й Ф.Р.), ЗДЕ ПОЙ ВЩМЙ ВЩ ОБЙВПМЕЕ РПМЕЪОЩ. рПОСФЙЕ РТПЙЪЧПДОПЗП ЛМБУУБ Ч C++, ПРЙУЩЧБЕНПЕ Ч #7.2, ОЕ ПВЕУРЕЮЙЧБАФ ПВЭЕЗП ТЕЫЕОЙС ЧУЕИ ЬФЙИ РТПВМЕН, ОП ПОП ДБЕФ УРПУПВ УРТБЧМСФШУС У ДПЧПМШОП ОЕВПМШЫЙН ЮЙУМПН ЧБЦОЩИ УМХЮБЕЧ. вХДЕФ, ОБРТЙНЕТ, РПЛБЪБОП, ЛБЛ ПРТЕДЕМЙФШ ЬЖЖЕЛФЙЧОЩК ЛМБУУ ПВЭЕЗП УЧСЪБООПЗП УРЙУЛБ ФБЛЙН ПВТБЪПН, ЮФПВЩ ЧУЕ ЕЗП ЧЕТУЙЙ ЙУРПМШЪПЧБМЙ ЛПД УПЧНЕУФОП.

оБРЙУБОЙЕ ПВЭЕГЕМЕЧЩИ УТЕДУФЧ - ЪБДБЮБ ОЕРТПУФБС, Й ЮБУФП ПУОПЧОПК БЛГЕОФ Ч ЙИ ТБЪТБВПФЛЕ ДТХЗПК, ЮЕН РТЙ ТБЪТБВПФЛЕ РТПЗТБНН УРЕГЙБМШОПЗП ОБЪОБЮЕОЙС. лПОЕЮОП, ОЕФ ЮЕФЛПК ЗТБОЙГЩ НЕЦДХ УТЕДУФЧБНЙ ПВЭЕЗП Й УРЕГЙБМШОПЗП ОБЪОБЮЕОЙС, Й Л НЕФПДБН Й СЪЩЛПЧЩН УТЕДУФЧБН, ЛПФПТЩЕ ПРЙУЩЧБАФУС Ч ЬФПК ЗМБЧЕ, НПЦОП ПФОПУЙФШУС ФБЛ, ЮФП ПОЙ УФБОПЧСФУС ЧУЕ ВПМЕЕ РПМЕЪОЩ У ТПУФПН ПВЯЕНБ Й УМПЦОПУФЙ УПЪДБЧБЕНЩИ РТПЗТБНН. 7.2 рТПЙЪЧПДОЩЕ лМБУУЩ 7.2.1 рПУФТПЕОЙЕ рТПЙЪЧПДОПЗП лМБУУБ 7.2.2 жХОЛГЙЙ юМЕОЩ 7.2.3 чЙДЙНПУФШ 7.2.4 хЛБЪБФЕМЙ 7.2.5 йЕТБТИЙС фЙРПЧ 7.2.6 лПОУФТХЛФПТЩ Й дЕУФТХЛФПТЩ 7.2.7 рПМС фЙРБ 7.2.8 чЙТФХБМШОЩЕ жХОЛГЙЙ юФПВЩ ТБЪДЕМЙФШ ЪБДБЮЙ РПОЙНБОЙС БРРБТБФБ СЪЩЛБ Й НЕФПДПЧ ЕЗП РТЙНЕОЕОЙС, ЪОБЛПНУФЧП У РПОСФЙЕН РТПЙЪЧПДОЩИ ЛМБУУПЧ ДЕМБЕФУС Ч ФТЙ ЬФБРБ. чОБЮБМЕ У РПНПЭША ОЕВПМШЫЙИ РТЙНЕТПЧ, ЛПФПТЩЕ ОЕ ОБДП ЧПУРТЙОЙНБФШ ЛБЛ ТЕБМЙУФЙЮОЩЕ, ВХДХФ ПРЙУБОЩ УБНЙ УТЕДУФЧБ СЪЩЛБ (ЪБРЙУШ Й УЕНБОФЙЛБ). рПУМЕ ЬФПЗП ДЕНПОУФТЙТХАФУС ОЕЛПФПТЩЕ ОЕПЮЕЧЙДОЩЕ РТЙНЕОЕОЙС РТПЙЪЧПДОЩИ ЛМБУУПЧ, Й, ОБЛПОЕГ, РТЙЧПДЙФУС ЪБЛПОЮЕООБС РТПЗТБННБ. 7.2.1 рПУФТПЕОЙЕ рТПЙЪЧПДОПЗП лМБУУБ тБУУНПФТЙН РПУФТПЕОЙЕ РТПЗТБННЩ, ЛПФПТБС ЙНЕЕФ ДЕМП У МАДШНЙ, УМХЦБЭЙНЙ Ч ОЕЛПФПТПК ЖЙТНЕ. уФТХЛФХТБ ДБООЩИ Ч ЬФПК РТПЗТБННЕ НПЦЕФ ВЩФШ ОБРТЙНЕТ ФБЛПК: struct employee { // УМХЦБЭЙК char* name; // ЙНС short age; // ЧПЪТБУФ short department; // РПДТБЪДЕМЕОЙЕ int salary; // employee* next; // ... };

уРЙУПЛ БОБМПЗЙЮОЩИ УМХЦБЭЙИ ВХДЕФ УЧСЪЩЧБФШУС ЮЕТЕЪ РПМЕ next. фЕРЕТШ ДБЧБКФЕ ПРТЕДЕМЙН НЕОЕДЦЕТБ: struct manager { // НЕОЕДЦЕТ employee emp; // ЪБРЙУШ П НЕОЕДЦЕТЕ ЛБЛ П УМХЦБЭЕН employee* group; // РПДЮЙОЕООЩЕ МАДЙ // ... };

нЕОЕДЦЕТ ФБЛЦЕ СЧМСЕФУС УМХЦБЭЙН; ПФОПУСЭЙЕУС Л УМХЦБЭЕНХ employee ДБООЩЕ ИТБОСФУС Ч ЮМЕОЕ emp ПВЯЕЛФБ manager. дМС ЮЙФБАЭЕЗП ЬФП ЮЕМПЧЕЛБ ЬФП, НПЦЕФ ВЩФШ, ПЮЕЧЙДОП, ОП ОЕФ ОЙЮЕЗП ЧЩДЕМСАЭЕЗП ЮМЕО emp ДМС ЛПНРЙМСФПТБ. хЛБЪБФЕМШ ОБ НЕОЕДЦЕТБ (manager*) ОЕ СЧМСЕФУС ХЛБЪБФЕМЕН ОБ УМХЦБЭЕЗП (employee*), РПЬФПНХ РТПУФП ЙУРПМШЪПЧБФШ ПДЙО ФБН, ЗДЕ ФТЕВХЕФУС ДТХЗПК, ОЕМШЪС. ч ЮБУФОПУФЙ, ОЕМШЪС РПНЕУФЙФШ НЕОЕДЦЕТБ Ч УРЙУПЛ УМХЦБЭЙИ, ОЕ ОБРЙУБЧ ДМС ЬФПЗП УРЕГЙБМШОХА РТПЗТБННХ. нПЦОП МЙВП РТЙНЕОЙФШ Л manager* СЧОПЕ РТЕПВТБЪПЧБОЙЕ ФЙРБ, МЙВП РПНЕУФЙФШ Ч УРЙУПЛ УМХЦБЭЙИ БДТЕУ ЮМЕОБ emp, ОП Й ФП Й ДТХЗПЕ НБМП ЬМЕЗБОФОП Й ДПЧПМШОП ОЕСУОП. лПТТЕЛФОЩК РПДИПД УПУФПЙФ Ч ФПН, ЮФПВЩ ХУФБОПЧЙФШ, ЮФП НЕОЕДЦЕТ СЧМСЕФУС УМХЦБЭЙН У ОЕЛПФПТПК ДПВБЧПЮОПК ЙОЖПТНБГЙЕК: struct manager : employee { employee* group; // ... };

manager СЧМСЕФУС РТПЙЪЧПДОЩН ПФ employee Й, ПВТБФОП, employee ЕУФШ ВБЪПЧЩК ЛМБУУ ДМС manager. лМБУУ manager ДПРПМОЙФЕМШОП Л ЮМЕОХ group ЙНЕЕФ ЮМЕОЩ ЛМБУУБ employee (name, age Й Ф.Д.).

йНЕС ПРТЕДЕМЕОЙС employee Й manager НЩ НПЦЕН ФЕРЕТШ УПЪДБФШ УРЙУПЛ УМХЦБЭЙИ, ОЕЛПФПТЩЕ ЙЪ ЛПФПТЩИ СЧМСАФУС НЕОЕДЦЕТБНЙ. оБРТЙНЕТ: void f() { manager m1, m2; employee e1, e2; employee* elist; elist = &m1; // РПНЕУФЙФШ m1, e1, m2 Й e2 Ч elist m1.next = &e1; e1.next = &m2; m2.next = &e2; e2.next = 0; }

рПУЛПМШЛХ НЕОЕДЦЕТ СЧМСЕФУС УМХЦБЭЙН, manager* НПЦЕФ ЙУРПМШЪПЧБФШУС ЛБЛ employee*. пДОБЛП УМХЦБЭЙК ОЕПВСЪБФЕМШОП СЧМСЕФУС НЕОЕДЦЕТПН, РПЬФПНХ ЙУРПМШЪПЧБФШ employee* ЛБЛ manager* ОЕМШЪС. 7.2.2 жХОЛГЙЙ юМЕОЩ рТПУФП УФТХЛФХТЩ ДБООЩИ ЧТПДЕ employee Й manager ОБ УБНПН ДЕМЕ ОЕ УФПМШ ЙОФЕТЕУОЩ Й ЮБУФП ОЕ ПУПВЕООП РПМЕЪОЩ, РПЬФПНХ ТБУУНПФТЙН, ЛБЛ ДПВБЧЙФШ Л ОЙН ЖХОЛГЙЙ. оБРТЙНЕТ: class employee { char* name; // ... public: employee* next; void print(); // ... }; class manager : public employee { // ... public: void print(); // ... };

оБДП ПФЧЕФЙФШ ОБ ОЕЛПФПТЩЕ ЧПРТПУЩ. лБЛ НПЦЕФ ЖХОЛГЙС ЮМЕО РТПЙЪЧПДОПЗП ЛМБУУБ manager ЙУРПМШЪПЧБФШ ЮМЕОЩ ЕЗП ВБЪПЧПЗП ЛМБУУБ employee? лБЛ ЮМЕОЩ ВБЪПЧПЗП ЛМБУУБ employee НПЗХФ ЙУРПМШЪПЧБФШ ЖХОЛГЙЙ ЮМЕОЩ РТПЙЪЧПДОПЗП ЛМБУУБ manager? лБЛЙЕ ЮМЕОЩ ВБЪПЧПЗП ЛМБУУБ employee НПЦЕФ ЙУРПМШЪПЧБФШ ЖХОЛГЙС ОЕ ЮМЕО ОБ ПВЯЕЛФЕ ФЙРБ manager? лБЛЙН ПВТБЪПН РТПЗТБННЙУФ НПЦЕФ РПЧМЙСФШ ОБ ПФЧЕФЩ ОБ ЬФЙ ЧПРТПУЩ, ЮФПВЩ ХДПЧМЕФЧПТЙФШ ФТЕВПЧБОЙСН РТЙМПЦЕОЙС?

тБУУНПФТЙН: void manager::print() { cout m2 = 2; // ok pb = (base*)&d; // ok: СЧОПЕ РТЕПВТБЪПЧБОЙЕ pb->m2 = 2; // ok

рПНЙНП ЧУЕЗП РТПЮЕЗП, ЬФПФ РТЙНЕТ РПЛБЪЩЧБЕФ, ЮФП ЙУРПМШЪХС СЧОПЕ РТЙЧЕДЕОЙЕ Л ФЙРХ НПЦОП УМПНБФШ РТБЧЙМБ ЪБЭЙФЩ. сУОП, ДЕМБФШ ЬФП ОЕ ТЕЛПНЕОДХЕФУС, Й ЬФП РТЙОПУЙФ РТПЗТБННЙУФХ ЪБУМХЦЕООХА "ОБЗТБДХ". л ОЕУЮБУФША , ОЕДЙУГЙРМЙОЙТПЧБООПЕ ЙУРПМШЪПЧБОЙЕ СЧОПЗП РТЕПВТБЪПЧБОЙС НПЦЕФ УПЪДБФШ БДУЛЙЕ ХУМПЧЙС ДМС ОЕЧЙООЩИ ЦЕТФЧ, ЛПФПТЩЕ ЬЛУРМХБФЙТХАФ РТПЗТБННХ, ЗДЕ ЬФП ДЕМБЕФУС. оП, Л УЮБУФША, ОЕФ УРПУПВБ ЧПУРПМШЪПЧБФШУС РТЙЧЕДЕОЙЕН ДМС РПМХЮЕОЙС ДПУФХРБ Л ЪБЛТЩФПНХ ЙНЕОЙ m1. ъБЛТЩФЩК ЮМЕО ЛМБУУБ НПЦЕФ ЙУРПМШЪПЧБФШУС ФПМШЛП ЮМЕОБНЙ Й ДТХЪШСНЙ ЬФПЗП ЛМБУУБ. 7.2.5 йЕТБТИЙС фЙРПЧ рТПЙЪЧПДОЩК ЛМБУУ УБН НПЦЕФ ВЩФШ ВБЪПЧЩН ЛМБУУПН. оБРТЙНЕТ: class employee { ... }; class secretary : employee { ... }; class manager : employee { ... }; class temporary : employee { ... }; class consultant : temporary { ... }; class director : manager { ... }; class vice_president : manager { ... }; class president : vice_president { ... };

фБЛПЕ НОПЦЕУФЧП ТПДУФЧЕООЩИ ЛМБУУПЧ РТЙОСФП ОБЪЩЧБФШ ЙЕТБТИЙЕК ЛМБУУПЧ. рПУЛПМШЛХ НПЦОП ЧЩЧПДЙФШ ЛМБУУ ФПМШЛП ЙЪ ПДОПЗП ВБЪПЧПЗП ЛМБУУБ, ФБЛБС ЙЕТБТИЙС СЧМСЕФУС ДЕТЕЧПН Й ОЕ НПЦЕФ ВЩФШ ЗТБЖПН ВПМЕЕ ПВЭЕК УФТХЛФХТЩ. оБРТЙНЕТ: class temporary { ... }; class employee { ... }; class secretary : employee { ... }; // ОЕ C++: class temporary_secretary : temporary : secretary { ... }; class consultant : temporary : employee { ... };

й ЬФПФ ЖБЛФ ЧЩЪЩЧБЕФ УПЦБМЕОЙЕ, РПФПНХ ЮФП ОБРТБЧМЕООЩК БГЙЛМЙЮЕУЛЙК ЗТБЖ РТПЙЪЧПДОЩИ ЛМБУУПЧ ВЩМ ВЩ ПЮЕОШ РПМЕЪЕО. фБЛЙЕ УФТХЛФХТЩ ПРЙУБФШ ОЕМШЪС, ОП НПЦОП УНПДЕМЙТПЧБФШ У РПНПЭША ЮМЕОПЧ УППФЧЕФУФЧХАЭЙК ФЙРПЧ. оБРТЙНЕТ: class temporary { ... }; class employee { ... }; class secretary : employee { ... }; // бМШФЕТОБФЙЧБ: class temporary_secretary : secretary { temporary temp; ... }; class consultant : employee { temporary temp; ... };

ьФП ЧЩЗМСДЙФ ОЕЬМЕЗБОФОП Й УФТБДБЕФ ЛБЛ ТБЪ ПФ ФЕИ РТПВМЕН, ДМС РТЕПДПМЕОЙС ЛПФПТЩИ ВЩМЙ ЙЪПВТЕФЕОЩ РТПЙЪЧПДОЩЕ ЛМБУУЩ. оБРТЙНЕТ, РПУЛПМШЛХ consultant ОЕ СЧМСЕФУС РТПЙЪЧПДОЩН ПФ temporary, consultant'Б ОЕМШЪС РПНЕЭБФШ У УРЙУПЛ ЧТЕНЕООЩИ УМХЦБЭЙИ (temporary employee), ОЕ ОБРЙУБЧ УРЕГЙБМШОПК РТПЗТБННЩ. пДОБЛП ЧП НОПЗЙИ РПМЕЪОЩИ РТПЗТБННБИ ЬФПФ НЕФПД ХУРЕЫОП ЙУРПМШЪХЕФУС. 7.2.6 лПОУФТХЛФПТЩ Й дЕУФТХЛФПТЩ дМС ОЕЛПФПТЩИ РТПЙЪЧПДОЩИ ЛМБУУПЧ ОХЦОЩ ЛПОУФТХЛФПТЩ. еУМЙ Х ВБЪПЧПЗП ЛМБУУБ ЕУФШ ЛПОУФТХЛФПТ, ПО ДПМЦЕО ЧЩЪЩЧБФШУС, Й ЕУМЙ ДМС ЬФПЗП ЛПОУФТХЛФПТБ ОХЦОЩ РБТБНЕФТЩ, ЙИ ОБДП РТЕДПУФБЧЙФШ. оБРТЙНЕТ: class base { // ... public: base(char* n, short t); ~base(); }; class derived : public base { base m; public: derived(char* n); ~derived(); };

рБТБНЕФТЩ ЛПОУФТХЛФПТБ ВБЪПЧПЗП ЛМБУУБ УРЕГЙЖЙГЙТХАФУС Ч ПРТЕДЕМЕОЙЙ ЛПОУФТХЛФПТБ РТПЙЪЧПДОПЗП ЛМБУУБ. ч ЬФПН УНЩУМЕ ВБЪПЧЩК ЛМБУУ ТБВПФБЕФ ФПЮОП ФБЛЦЕ, ЛБЛ ОЕЙНЕОПЧБООЩК ЮМЕО РТПЙЪЧПДОПЗП ЛМБУУБ (УН. #5.5.4). оБРТЙНЕТ: derived::derived(char* n) : (n,10), m("member",123) { // ... }

пВЯЕЛФЩ ЛМБУУБ ЛПОУФТХЙТХАФУС УОЙЪХ ЧЧЕТИ: УОБЮБМБ ВБЪПЧЩК, РПФПН ЮМЕОЩ, Б РПФПН УБН РТПЙЪЧПДОЩК ЛМБУУ. хОЙЮФПЦБАФУС ПОЙ Ч ПВТБФОПН РПТСДЛЕ: УОБЮБМБ УБН РТПЙЪЧПДОЩК ЛМБУУ, РПФПН ЮМЕОЩ Б РПФПН ВБЪПЧЩК. 7.2.7 рПМС фЙРБ юФПВЩ ЙУРПМШЪПЧБФШ РТПЙЪЧПДОЩЕ ЛМБУУЩ ОЕ РТПУФП ЛБЛ ХДПВОХА УПЛТБЭЕООХА ЪБРЙУШ Ч ПРЙУБОЙСИ, ОБДП ТБЪТЕЫЙФШ УМЕДХАЭХА РТПВМЕНХ: еУМЙ ЪБДБО ХЛБЪБФЕМШ ФЙРБ base*, ЛБЛПНХ РТПЙЪЧПДОПНХ ФЙРХ Ч ДЕКУФЧЙФЕМШОПУФЙ РТЙОБДМЕЦЙФ ХЛБЪЩЧБЕНЩК ПВЯЕЛФ? еУФШ ФТЙ ПУОПЧОЩИ УРПУПВБ ТЕЫЕОЙС ЬФПК РТПВМЕНЩ:

[1] пВЕУРЕЮЙФШ, ЮФПВЩ ЧУЕЗДБ ХЛБЪЩЧБМЙУШ ФПМШЛП ПВЯЕЛФЩ ПДОПЗП ФЙРБ (#7.3.3);

[2] рПНЕУФЙФШ Ч ВБЪПЧЩК ЛМБУУ РПМЕ ФЙРБ, ЛПФПТПЕ УНПЗХФ РТПУНБФТЙЧБФШ ЖХОЛГЙЙ; Й

[3] йУРПМШЪПЧБФШ ЧЙТФХБМШОЩЕ ЖХОЛГЙЙ (#7.2.8). пВЩЛОПЧЕООП ХЛБЪБФЕМЙ ОБ ВБЪПЧЩЕ ЛМБУУЩ ЙУРПМШЪХАФУС РТЙ ТБЪТБВПФЛЕ ЛПОФЕКОЕТОЩИ (ЙМЙ ЧНЕЭБАЭЙИ) ЛМБУУПЧ: НОПЦЕУФЧП, ЧЕЛФПТ, УРЙУПЛ Й Ф.Р. ч ЬФПН УМХЮБЕ ТЕЫЕОЙЕ 1 ДБЕФ ПДОПТПДОЩЕ УРЙУЛЙ, ФП ЕУФШ УРЙУЛЙ ПВЯЕЛФПЧ ПДОПЗП ФЙРБ. тЕЫЕОЙС 2 Й 3 НПЦОП ЙУРПМШЪПЧБФШ ДМС РПУФТПЕОЙС ОЕПДОПТПДОЩИ УРЙУЛПЧ, ФП ЕУФШ УРЙУЛПЧ ПВЯЕЛФПЧ (ХЛБЪБФЕМЕК ОБ ПВЯЕЛФЩ) ОЕУЛПМШЛЙИ ТБЪМЙЮОЩИ ФЙРПЧ. тЕЫЕОЙЕ 3 - ЬФП УРЕГЙБМШОЩК ЧБТЙБОФ ТЕЫЕОЙС 2, ВЕЪПРБУОЩК ПФОПУЙФЕМШОП ФЙРБ.

дБЧБКФЕ УОБЮБМБ ЙУУМЕДХЕН РТПУФПЕ ТЕЫЕОЙЕ У РПНПЭША РПМС ФЙРБ, ФП ЕУФШ ТЕЫЕОЙЕ 2. рТЙНЕТ УП УМХЦБЭЙНЙ Й НЕОЕДЦЕТБНЙ НПЦОП ВЩМП ВЩ РЕТЕПРТЕДЕМЙФШ ФБЛ: enum empl_type { M, E }; struct employee { empl_type type; employee* next; char* name; short department; // ... }; struct manager : employee { employee* group; short level; // ХТПЧЕОШ };

йНЕС ЬФП, НЩ НПЦЕН ФЕРЕТШ ОБРЙУБФШ ЖХОЛГЙА, ЛПФПТБС РЕЮБФБЕФ ЙОЖПТНБГЙА П ЛБЦДПН УМХЦБЭЕН: void print_employee(employee* e) { switch (e->type) { case E: cout name is_friend()) { if (find(&friends,n)) error("friend redeclared"); else if (find(&members,n)) error("friend redeclared as member"); else friends.append(n); } if (n->is_operator()) operators.append(n); // ... }

ЗДЕ is_iterator() Й is_friend() СЧМСАФУС ЖХОЛГЙСНЙ ЮМЕОБНЙ ЛМБУУБ name. жХЛОГЙА find() НПЦОП ОБРЙУБФШ ФБЛ: int find(nlist* ll, name* n) { slist_iterator ff(*(slist*)ll); ent p; while ( p=ff() ) if (p==n) return 1; return 0; }

ъДЕУШ РТЙНЕОСЕФУС СЧОПЕ РТЕПВТБЪПЧБОЙЕ ФЙРБ, ЮФПВЩ РТЙНЕОЙФШ slist_iterator Л nlist. вПМЕЕ ИПТПЫЕЕ ТЕЫЕОЙЕ, - УДЕМБФШ ЙФЕТБФПТ ДМС nlist'ПЧ, РТЙЧЕДЕОП Ч #7.3.5. рЕЮБФБФШ nlist НПЦЕФ, ОБРТЙНЕТ, ФБЛБС ЖХОЛГЙС: void print_list(nlist* ll, char* list_name) { slist_iterator count(*(slist*)ll); name* p; int n = 0; while ( count() ) n++; cout

Соседние файлы в папке Введение в язык С++ - Б. Страустрап