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

вШСТО уФТБХУФТБР. чЧЕДЕОЙЕ Ч СЪЩЛ уЙ++, лМБУУЩ 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 уЕТЧЕТ йОЖПТНБГЙПООЩИ фЕИОПМПЗЙК УПДЕТЦЙФ НПТЕ(!) БОБМЙФЙЮЕУЛПК ЙОЖПТНБГЙЙ зМБЧБ 5 лМБУУЩ ьФЙ ФЙРЩ ОЕ "БВУФТБЛФОЩ", ПОЙ УФПМШ ЦЕ ТЕБМШОЩ, ЛБЛ int Й float. - дХЗ нБЛйМТПК ч ЬФПК ЗМБЧЕ ПРЙУЩЧБАФУС ЧПЪНПЦОПУФЙ ПРТЕДЕМЕОЙС ОПЧЩИ ФЙРПЧ Ч C++, ДМС ЛПФПТЩИ ДПУФХР Л ДБООЩН ПЗТБОЙЮЕО ЪБДБООЩН НОПЦЕУФЧПН ЖХОЛГЙК ДПУФХРБ. пВЯСУОСАФУС УРПУПВЩ ЪБЭЙФЩ УФТХЛФХТЩ ДБООЩИ, ЕЕ ЙОЙГЙБМЙЪБГЙЙ, ДПУФХРБ Л ОЕК Й, ОБЛПОЕГ, ЕЕ ХОЙЮФПЦЕОЙС. рТЙНЕТЩ УПДЕТЦБФ РТПУФЩЕ ЛМБУУЩ ДМС ТБВПФЩ У ФБВМЙГЕК ЙНЕО, НБОЙРХМСГЙЙ УФЕЛПН, ТБВПФХ У НОПЦЕУФЧПН Й ТЕБМЙЪБГЙА ДЙУЛТЙНЙОЙТХАЭЕЗП (ФП ЕУФШ, "ОБДЕЦОПЗП") ПВЯЕДЙОЕОЙС. дЧЕ УМЕДХАЭЙЕ ЗМБЧЩ ДПРПМОСФ ПРЙУБОЙЕ ЧПЪНПЦОПУФЕК ПРТЕДЕМЕОЙС ОПЧЩИ ФЙРПЧ Ч C++ Й РПЪОБЛПНСФ ЮЙФБФЕМС ЕЭЕ У ОЕЛПФПТЩНЙ ЙОФЕТЕУОЩНЙ РТЙНЕТБНЙ. 5.1 ъОБЛПНУФЧП Й ЛТБФЛЙК ПВЪПТ рТЕДОБЪОБЮЕОЙЕ РПОСФЙС ЛМБУУБ, ЛПФПТПНХ РПУЧСЭЕОЩ ЬФБ Й ДЧЕ РПУМЕДХАЭЙЕ ЗМБЧЩ, УПУФПЙФ Ч ФПН, ЮФПВЩ РТЕДПУФБЧЙФШ РТПЗТБННЙУФХ ЙОУФТХНЕОФ ДМС УПЪДБОЙС ОПЧЩИ ФЙРПЧ, УФПМШ ЦЕ ХДПВОЩИ Ч ПВТБЭЕОЙЙ УЛПМШ Й ЧУФТПЕООЩЕ ФЙРЩ. ч ЙДЕБМЕ ФЙР, ПРТЕДЕМСЕНЩК РПМШЪПЧБФЕМЕН, УРПУПВПН ЙУРПМШЪПЧБОЙС ОЕ ДПМЦЕО ПФМЙЮБФШУС ПФ ЧУФТПЕООЩИ ФЙРПЧ, ФПМШЛП УРПУПВПН УПЪДБОЙС.

фЙР ЕУФШ ЛПОЛТЕФОПЕ РТЕДУФБЧМЕОЙЕ ОЕЛПФПТПК ЛПОГЕРГЙЙ (РПОСФЙС). оБРТЙНЕТ, ЙНЕАЭЙКУС Ч C++ ФЙР float У ЕЗП ПРЕТБГЙСНЙ +, -, * Й Ф.Д. ПВЕУРЕЮЙЧБЕФ ПЗТБОЙЮЕООХА, ОП ЛПОЛТЕФОХА ЧЕТУЙА НБФЕНБФЙЮЕУЛПЗП РПОСФЙС ДЕКУФЧЙФЕМШОПЗП ЮЙУМБ. оПЧЩК ФЙР УПЪДБЕФУС ДМС ФПЗП, ЮФПВЩ ДБФШ УРЕГЙБМШОПЕ Й ЛПОЛТЕФОПЕ ПРТЕДЕМЕОЙЕ РПОСФЙС, ЛПФПТПНХ ОЙЮФП РТСНП Й ПЮЕЧЙДОП УТЕДЙ ЧУФТПЕООЩИ ФЙРПЧ ОЕ ПФЧЕЮБЕФ. оБРТЙНЕТ, Ч РТПЗТБННЕ, ЛПФПТБС ТБВПФБЕФ У ФЕМЕЖПОПН, НПЦОП ВЩМП ВЩ УПЪДБФШ ФЙР trunk_module (ЬМЕНЕОФ МЙОЙЙ), Б Ч РТПЗТБННЕ ПВТБВПФЛЙ ФЕЛУФПЧ - ФЙР list_of_paragraphs (УРЙУПЛ РБТБЗТБЖПЧ). лБЛ РТБЧЙМП, РТПЗТБННХ, Ч ЛПФПТПК УПЪДБАФУС ФЙРЩ, ИПТПЫП ПФЧЕЮБАЭЙЕ РПОСФЙСН РТЙМПЦЕОЙС, РПОСФШ МЕЗЮЕ, ЮЕН РТПЗТБННХ, Ч ЛПФПТПК ЬФП ОЕ ДЕМБЕФУС. иПТПЫП ЧЩВТБООЩЕ ФЙРЩ, ПРТЕДЕМСЕНЩЕ РПМШЪПЧБФЕМЕН, ДЕМБАФ РТПЗТБННХ ВПМЕЕ ЮЕФЛПК Й ЛПТПФЛПК. ьФП ФБЛЦЕ РПЪЧПМСЕФ ЛПНРЙМСФПТХ ПВОБТХЦЙЧБФШ ОЕДПРХУФЙНЩЕ ЙУРПМШЪПЧБОЙС ПВЯЕЛФПЧ, ЛПФПТЩЕ Ч РТПФЙЧОПН УМХЮБЕ ПУФБОХФУС ОЕПВОБТХЦЕООЩНЙ ДП ФЕУФЙТПЧБОЙС РТПЗТБННЩ.

ч ПРТЕДЕМЕОЙЙ ОПЧПЗП ФЙРБ ПУОПЧОБС ЙДЕС - ПФДЕМЙФШ ОЕУХЭЕУФЧЕООЩЕ РПДТПВОПУФЙ ТЕБМЙЪБГЙЙ (ОБРТЙНЕТ, ЖПТНБФ ДБООЩИ, ЛПФПТЩЕ ЙУРПМШЪХАФУС ДМС ИТБОЕОЙС ПВЯЕЛФБ ФЙРБ) ПФ ФЕИ ЛБЮЕУФЧ, ЛПФПТЩЕ УХЭЕУФЧЕООЩ ДМС ЕЗП РТБЧЙМШОПЗП ЙУРПМШЪПЧБОЙС (ОБРТЙНЕТ, РПМОЩК УРЙУПЛ ЖХОЛГЙК, ЛПФПТЩЕ ЙНЕАФ ДПУФХР Л ДБООЩН). фБЛПЕ ТБЪДЕМЕОЙЕ НПЦОП ПРЙУБФШ ФБЛ, ЮФП ТБВПФБ УП УФТХЛФХТПК ДБООЩИ Й ЧОХФТЕООЙНЙ БДНЙОЙУФТБФЙЧОЩНЙ РПДРТПЗТБННБНЙ ПУХЭЕУФЧМСЕФУС ЮЕТЕЪ УРЕГЙБМШОЩК ЙОФЕТЖЕКУ (ЛБОБМЙТХЕФУС).

ьФБ ЗМБЧБ УПУФПЙФ ЙЪ ЮЕФЩТЕИ РТБЛФЙЮЕУЛЙ ПФДЕМШОЩИ ЮБУФЕК: лМБУУЩ Й юМЕОЩ. ьФПФ ТБЪДЕМ ЪОБЛПНЙФ У ПУОПЧОЩН РПОСФЙЕН ФЙРБ, ПРТЕДЕМСЕНПЗП РПМШЪПЧБФЕМЕН, ЛПФПТЩК ОБЪЩЧБЕФУС ЛМБУУ (class). дПУФХР Л ПВЯЕЛФБН ЛМБУУБ НПЦЕФ ПЗТБОЙЮЙЧБФШУС ОБВПТПН ЖХОЛГЙК, ЛПФПТЩЕ ПРЙУБОЩ ЛБЛ ЮБУФШ ЬФПЗП ЛМБУУБ. фБЛЙЕ ЖХОЛГЙЙ ОБЪЩЧБАФУС ЖХОЛГЙСНЙ ЮМЕОБНЙ. пВЯЕЛФЩ ЛМБУУБ УПЪДБАФУС Й ЙОЙГЙБМЙЪЙТХАФУС ЖХОЛГЙСНЙ ЮМЕОБНЙ, УРЕГЙБМШОП ДМС ЬФПК ГЕМЙ ПРЙУБООЩНЙ. ьФЙ ЖХОЛГЙЙ ОБЪЩЧБАФУС ЛПОУФТХЛФПТБНЙ. жХОЛГЙС ЮМЕО НПЦЕФ ВЩФШ УРЕГЙБМШОЩН ПВТБЪПН ПРЙУБОБ ДМС "ПЮЙУФЛЙ" ЛБЦДПЗП ЛМБУУПЧПЗП ПВЯЕЛФБ РТЙ ЕЗП ХОЙЮФПЦЕОЙЙ. фБЛБС ЖХОЛГЙС ОБЪЩЧБЕФУС ДЕУФТХЛФПТПН. йОФЕТЖЕКУЩ Й тЕБМЙЪБГЙЙ. ч ЬФПН ТБЪДЕМЕ РТЙЧПДЙФУС ДЧБ РТЙНЕТБ ФПЗП, ЛБЛ ЛМБУУ РТПЕЛФЙТХЕФУС, ТЕБМЙЪХЕФУС Й ЙУРПМШЪХЕФУС. дТХЪШС Й пВЯЕДЙОЕОЙС. ч ЬФПН ТБЪДЕМЕ РТЙЧПДЙФУС НОПЗП ДПРПМОЙФЕМШОЩИ РПДТПВОПУФЕК, ЛБУБАЭЙИУС ЛМБУУПЧ. ч ОЕН РПЛБЪБОП, ЛБЛ РТЕДПУФБЧЙФШ ДПУФХР Л ЪБЛТЩФПК ЮБУФЙ ЛМБУУБ ЖХОЛГЙЙ, ЛПФПТБС ОЕ СЧМСЕФУС ЮМЕОПН ЬФПЗП ЛМБУУБ. фБЛБС ЖХОЛГЙС ОБЪЩЧБЕФУС ДТХЗ (friend). ч ЬФПН ТБЪДЕМЕ РПЛБЪБОП ФБЛЦЕ, ЛБЛ ПРТЕДЕМЙФШ ДЙУЛТЙНЙОЙТХАЭЕЕ ПВЯЕДЙОЕОЙЕ. лПОУФТХЛФПТЩ Й дЕУФТХЛФПТЩ. пВЯЕЛФ НПЦЕФ УПЪДБЧБФШУС ЛБЛ БЧФПНБФЙЮЕУЛЙК, УФБФЙЮЕУЛЙК ЙМЙ ЛБЛ ПВЯЕЛФ Ч УЧПВПДОПК РБНСФЙ. пВЯЕЛФ НПЦЕФ ФБЛЦЕ ВЩФШ ЮМЕОПН ОЕЛПФПТПК УПЧПЛХРОПУФЙ (ФЙРБ ЧЕЛФПТБ ЙМЙ ЛМБУУБ), ЛПФПТБС Ч УЧПА ПЮЕТЕДШ НПЦЕФ ТБЪНЕЭБФШУС ПДОЙН ЙЪ ЬФЙИ ФТЕИ УРПУПВПЧ. дПЧПМШОП РПДТПВОП ПВЯСУОСЕФУС ЙУРПМШЪПЧБОЙЕ ЛПОУФТХЛФПТПЧ Й ДЕУФТХЛФПТПЧ. 5.2 лМБУУЩ Й юМЕОЩ 5.2.1 жХОЛГЙЙ юМЕОЩ 5.2.2 лМБУУЩ 5.2.3 уУЩМЛЙ ОБ уЕВС 5.2.4 йОЙГЙБМЙЪБГЙС 5.2.5 пЮЙУФЛБ 5.2.6 Inline лМБУУ - ЬФП ПРТЕДЕМСЕНЩК РПМШЪПЧБФЕМЕН ФЙР. ьФПФ ТБЪДЕМ ЪОБЛПНЙФ У ПУОПЧОЩНЙ УТЕДУФЧБНЙ ПРТЕДЕМЕОЙС ЛМБУУБ, УПЪДБОЙС ПВЯЕЛФБ ЛМБУУБ, ТБВПФЩ У ФБЛЙНЙ ПВЯЕЛФБНЙ Й, ОБЛПОЕГ, ХОЙЮФПЦЕОЙС ФБЛЙИ ПВЯЕЛФПЧ РПУМЕ ЙУРПМШЪПЧБОЙС. 5.2.1 жХОЛГЙЙ юМЕОЩ тБУУНПФТЙН ТЕБМЙЪБГЙА РПОСФЙС ДБФЩ У ЙУРПМШЪПЧБОЙЕН struct ДМС ФПЗП, ЮФПВЩ ПРТЕДЕМЙФШ РТЕДУФБЧМЕОЙЕ ДБФЩ date Й НОПЦЕУФЧБ ЖХОЛГЙК ДМС ТБВПФЩ У РЕТЕНЕООЩНЙ ЬФПЗП ФЙРБ: struct date { int month, day, year; }; // ДБФБ: НЕУСГ, ДЕОШ, ЗПД } date today; void set_date(date*, int, int, int); void next_date(date*); void print_date(date*); // ...

оЙЛБЛПК СЧОПК УЧСЪЙ НЕЦДХ ЖХОЛГЙСНЙ Й ФЙРПН ДБООЩИ ОЕФ. фБЛХА УЧСЪШ НПЦОП ХУФБОПЧЙФШ, ПРЙУБЧ ЖХОЛГЙЙ ЛБЛ ЮМЕОЩ: struct date { int month, day, year; void set(int, int, int); void get(int*, int*, int*); void next(); void print(); };

жХОЛГЙЙ, ПРЙУБООЩЕ ФБЛЙН ПВТБЪПН, ОБЪЩЧБАФУС ЖХОЛГЙСНЙ ЮМЕОБНЙ Й НПЗХФ ЧЩЪЩЧБФШУС ФПМШЛП ДМС УРЕГЙБМШОПК РЕТЕНЕООПК УППФЧЕФУФЧХАЭЕЗП ФЙРБ У ЙУРПМШЪПЧБОЙЕН УФБОДБТФОПЗП УЙОФБЛУЙУБ ДМС ДПУФХРБ Л ЮМЕОБН УФТХЛФХТЩ. оБРТЙНЕТ: date today; // УЕЗПДОС date my_burthday; // НПК ДЕОШ ТПЦДЕОЙС void f() { my_burthday.set(30,12,1950); today.set(18,1,1985); my_burthday.print(); today.next(); }

рПУЛПМШЛХ ТБЪОЩЕ УФТХЛФХТЩ НПЗХФ ЙНЕФШ ЖХОЛГЙЙ ЮМЕОЩ У ПДЙОБЛПЧЩНЙ ЙНЕОБНЙ, РТЙ ПРТЕДЕМЕОЙЙ ЖХОЛГЙЙ ЮМЕОБ ОЕПВИПДЙНП ХЛБЪЩЧБФШ ЙНС УФТХЛФХТЩ: void date::next() { if ( ++day > 28 ) { // ДЕМБЕФ УМПЦОХА ЮБУФШ ТБВПФЩ } }

ч ЖХОЛГЙЙ ЮМЕОЕ ЙНЕОБ ЮМЕОПЧ НПЗХФ ЙУРПМШЪПЧБФШУС ВЕЪ СЧОПК УУЩМЛЙ ОБ ПВЯЕЛФ. ч ЬФПН УМХЮБЕ ЙНС ПФОПУЙФУС Л ЮМЕОХ ФПЗП ПВЯЕЛФБ, ДМС ЛПФПТПЗП ЖХОЛГЙС ВЩМБ ЧЩЪЧБОБ. 5.2.2 лМБУУЩ пРЙУБОЙЕ date Ч РТЕДЩДХЭЕН РПДТБЪДЕМЕ ДБЕФ НОПЦЕУФЧП ЖХОЛГЙК ДМС ТБВПФЩ У date, ОП ОЕ ХЛБЪЩЧБЕФ, ЮФП ЬФЙ ЖХОЛГЙЙ ДПМЦОЩ ВЩФШ ЕДЙОУФЧЕООЩНЙ ДМС ДПУФХРБ Л ПВЯЕЛФБН ФЙРБ date. ьФП ПЗТБОЙЮЕОЙЕ НПЦОП ОБМПЦЙФШ ЙУРПМШЪХС ЧНЕУФП struct class: class date { int month, day, year; public: void set(int, int, int); void get(int*, int*, int*); void next(); void print(); };

нЕФЛБ public ДЕМЙФ ФЕМП ЛМБУУБ ОБ ДЧЕ ЮБУФЙ. йНЕОБ Ч РЕТЧПК, ЪБЛТЩФПК ЮБУФЙ, НПЗХФ ЙУРПМШЪПЧБФШУС ФПМШЛП ЖХОЛГЙСНЙ ЮМЕОБНЙ. чФПТБС, ПФЛТЩФБС ЮБУФШ, УПУФБЧМСЕФ ЙОФЕТЖЕКУ Л ПВЯЕЛФХ ЛМБУУБ. Struct - ЬФП РТПУФП class, Х ЛПФПТПЗП ЧУЕ ЮМЕОЩ ПВЭЙЕ, РПЬФПНХ ЖХОЛГЙЙ ЮМЕОЩ ПРТЕДЕМСАФУС Й ЙУРПМШЪХАФУС ФПЮОП ФБЛ ЦЕ, ЛБЛ Ч РТЕДЩДХЭЕН УМХЮБЕ. оБРТЙНЕТ: void date::ptinr() // РЕЮБФБЕФ Ч ЪБРЙУЙ, РТЙОСФПК Ч уыб { cout suc p->pre = this; // СЧОПЕ ЙУРПМШЪПЧБОЙЕ this suc->pre = p; // ФП ЕУФШ, this->suc->pre = p suc = p; // ФП ЕУФШ, this->suc = p } dlink* list_head; void f(dlink*a, dlink *b) { // ... list_head->append(a); list_head->append(b); }

гЕРПЮЛЙ ФБЛПК ПВЭЕК РТЙТПДЩ СЧМСАФУС ПУОПЧПК ДМС УРЙУЛПЧЩИ ЛМБУУПЧ, ЛПФПТЩЕ ПРЙУЩЧБАФУС Ч зМБЧЕ 7. юФПВЩ РТЙУПЕДЙОЙФШ ЪЧЕОП Л УРЙУЛХ ОЕПВИПДЙНП ПВОПЧЙФШ ПВЯЕЛФЩ, ОБ ЛПФПТЩЕ ХЛБЪЩЧБАФ ХЛБЪБФЕМЙ this, pre Й suc (ФЕЛХЭЙК, РТЕДЩДХЭЙК Й РПУМЕДХАЭЙК). чУЕ ПОЙ ФЙРБ dlink, РПЬФПНХ ЖХОЛГЙС ЮМЕО dlink::append() ЙНЕЕФ Л ОЙН ДПУФХР. еДЙОЙГЕК ЪБЭЙФЩ Ч C++ СЧМСЕФУС class, Б ОЕ ПФДЕМШОЩК ПВЯЕЛФ ЛМБУУБ. 5.2.4 йОЙГЙБМЙЪБГЙС йУРПМШЪПЧБОЙЕ ДМС ПВЕУРЕЮЕОЙС ЙОЙГЙБМЙЪБГЙЙ ПВЯЕЛФБ ЛМБУУБ ЖХОЛГЙК ЧТПДЕ set_date() (ХУФБОПЧЙФШ ДБФХ) ОЕЬМЕЗБОФОП Й ЮТЕЧБФП ПЫЙВЛБНЙ. рПУЛПМШЛХ ОЙЗДЕ ОЕ ХФЧЕТЦДБЕФУС, ЮФП ПВЯЕЛФ ДПМЦЕО ВЩФШ ЙОЙГЙБМЙЪЙТПЧБО, ФП РТПЗТБННЙУФ НПЦЕФ ЪБВЩФШ ЬФП УДЕМБФШ, ЙМЙ (ЮФП РТЙЧПДЙФ, ЛБЛ РТБЧЙМП, Л УФПМШ ЦЕ ТБЪТХЫЙФЕМШОЩН РПУМЕДУФЧЙСН) УДЕМБФШ ЬФП ДЧБЦДЩ. еУФШ ВПМЕЕ ИПТПЫЙК РПДИПД: ДБФШ ЧПЪНПЦОПУФШ РТПЗТБННЙУФХ ПРЙУБФШ ЖХОЛГЙА, СЧОП РТЕДОБЪОБЮЕООХА ДМС ЙОЙГЙБМЙЪБГЙЙ ПВЯЕЛФПЧ. рПУЛПМШЛХ ФБЛБС ЖХОЛГЙС ЛПОУФТХЙТХЕФ ЪОБЮЕОЙС ДБООПЗП ФЙРБ, ПОБ ОБЪЩЧБЕФУС ЛПОУФТХЛФПТПН. лПОУФТХЛФПТ ТБУРПЪОБЕФУС РП ФПНХ, ЮФП ЙНЕЕФ ФП ЦЕ ЙНС, ЮФП Й УБН ЛМБУУ. оБРТЙНЕТ: class date { // ... date(int, int, int); };

лПЗДБ ЛМБУУ ЙНЕЕФ ЛПОУФТХЛФПТ, ЧУЕ ПВЯЕЛФЩ ЬФПЗП ЛМБУУБ ВХДХФ ЙОЙГЙБМЙЪЙТПЧБФШУС. еУМЙ ДМС ЛПОУФТХЛФПТБ ОХЦОЩ РБТБНЕФТЩ, ПОЙ ДПМЦОЩ ДБЧБФШУС: date today = date(23,6,1983); date xmas(25,12,0); // УПЛТБЭЕООБС ЖПТНБ // (xmas - ТПЦДЕУФЧП) date my_burthday; // ОЕДПРХУФЙНП, ПРХЭЕОБ ЙОЙГЙБМЙЪБГЙС

юБУФП ВЩЧБЕФ ИПТПЫП ПВЕУРЕЮЙФШ ОЕУЛПМШЛП УРПУПВПЧ ЙОЙГЙБМЙЪБГЙЙ ПВЯЕЛФБ ЛМБУУБ. ьФП НПЦОП УДЕМБФШ, ЪБДБЧ ОЕУЛПМШЛП ЛПОУФТХЛФПТПЧ. оБРТЙНЕТ: class date { int month, day, year; public: // ... date(int, int, int); // ДЕОШ НЕУСГ ЗПД date(char*); // ДБФБ Ч УФТПЛПЧПН РТЕДУФБЧМЕОЙЙ date(int); // ДЕОШ, НЕУСГ Й ЗПД УЕЗПДОСЫОЙЕ date(); // ДБФБ РП ХНПМЮБОЙА: УЕЗПДОС };

лПОУФТХЛФПТЩ РПДЮЙОСАФУС ФЕН ЦЕ РТБЧЙМБН ПФОПУЙФЕМШОП ФЙРПЧ РБТБНЕФТПЧ, ЮФП Й РЕТЕЗТХЦЕООЩЕ ЖХОЛГЙЙ (#4.6.7). еУМЙ ЛПОУФТХЛФПТЩ УХЭЕУФЧЕООП ТБЪМЙЮБАФУС РП ФЙРБН УЧПЙИ РБТБНЕФТПЧ, ФП ЛПНРЙМСФПТ РТЙ ЛБЦДПН ЙУРПМШЪПЧБОЙЙ НПЦЕФ ЧЩВТБФШ РТБЧЙМШОЩК: date today(4); date july4("йАМШ 4, 1983"); date guy("5 оПС"); date now; // ЙОЙГЙБМЙЪЙТХЕФУС РП ХНПМЮБОЙА

ъБНЕФШФЕ, ЮФП ЖХОЛГЙЙ ЮМЕОЩ НПЗХФ ВЩФШ РЕТЕЗТХЦЕОЩ ВЕЪ СЧОПЗП ЙУРПМШЪПЧБОЙС ЛМАЮЕЧПЗП УМПЧБ overload. рПУЛПМШЛХ РПМОЩК УРЙУПЛ ЖХОЛГЙК ЮМЕОПЧ ОБИПДЙФУС Ч ПРЙУБОЙЙ ЛМБУУБ Й ЛБЛ РТБЧЙМП ЛПТПФЛЙК, ФП ОЕФ ОЙЛБЛПК УЕТШЕЪОПК РТЙЮЙОЩ ФТЕВПЧБФШ ЙУРПМШЪПЧБОЙС УМПЧБ overload ДМС РТЕДПФЧТБЭЕОЙС УМХЮБКОПЗП РПЧФПТОПЗП ЙУРПМШЪПЧБОЙС ЙНЕОЙ.

тБЪНОПЦЕОЙЕ ЛПОУФТХЛФПТПЧ Ч РТЙНЕТЕ У date ФЙРЙЮОП. рТЙ ТБЪТБВПФЛЕ ЛМБУУБ ЧУЕЗДБ ЕУФШ УПВМБЪО ПВЕУРЕЮЙФШ "ЧУЕ", РПУЛПМШЛХ ЛБЦЕФУС РТПЭЕ ПВЕУРЕЮЙФШ ЛБЛПЕ-ОЙВХДШ УТЕДУФЧП РТПУФП ОБ УМХЮБК, ЮФП ПОП ЛПНХ-ФП РПОБДПВЙФУС ЙМЙ РПФПНХ, ЮФП ПОП ЙЪСЭОП ЧЩЗМСДЙФ, ЮЕН ТЕЫЙФШ, ЮФП ЦЕ ОХЦОП ОБ УБНПН ДЕМЕ. рПУМЕДОЕЕ ФТЕВХЕФ ВПМШЫЙИ ТБЪНЩЫМЕОЙК, ОП ПВЩЮОП РТЙЧПДЙФ Л РТПЗТБННБН, ЛПФПТЩЕ НЕОШЫЕ РП ТБЪНЕТХ Й ВПМЕЕ РПОСФОЩ. пДЙО ЙЪ УРПУПВПЧ УПЛТБФЙФШ ЮЙУМП ТПДУФЧЕООЩИ ЖХОЛГЙК - ЙУРПМШЪПЧБФШ РБТБНЕФТЩ РП ХНПМЮБОЙА. ч УМХЮБЕ date ДМС ЛБЦДПЗП РБТБНЕФТБ НПЦОП ЪБДБФШ ЪОБЮЕОЙЕ РП ХНПМЮБОЙА, ЙОФЕТРТЕФЙТХЕНПЕ ЛБЛ "РП ХНПМЮБОЙА РТЙОЙНБФШ: today" (УЕЗПДОС). class date { int month, day, year; public: // ... date(int d =0, int m =0, int y =0); date(char*); // ДБФБ Ч УФТПЛПЧПН РТЕДУФБЧМЕОЙЙ }; date::date(int d, int m, int y) { day = d ? d : today.day; month = m ? m : today.month; year = y ? y : today.year; // РТПЧЕТЛБ, ЮФП ДБФБ ДПРХУФЙНБС // ... }

лПЗДБ ЙУРПМШЪХЕФУС ЪОБЮЕОЙЕ РБТБНЕФТБ, ХЛБЪЩЧБАЭЕЕ "ВТБФШ РП ХНПМЮБОЙА", ЧЩВТБООПЕ ЪОБЮЕОЙЕ ДПМЦОП МЕЦБФШ ЧОЕ НОПЦЕУФЧБ ЧПЪНПЦОЩИ ЪОБЮЕОЙК РБТБНЕФТБ. дМС ДОС day Й НЕУСГБ mounth СУОП, ЮФП ЬФП ФБЛ, ОП ДМС ЗПДБ year ЧЩВПТ ОХМС ОЕПЮЕЧЙДЕО. л УЮБУФША, Ч ЕЧТПРЕКУЛПН ЛБМЕОДБТЕ ОЕФ ОХМЕЧПЗП ЗПДБ . уТБЪХ РПУМЕ 1 З. ДП О.Ь. (year==-1) ЙДЕФ 1 З. О.Ь. (year==1), ОП ДМС ТЕБМШОПК РТПЗТБННЩ ЬФП НПЦЕФ ПЛБЪБФШУС УМЙЫЛПН ФПОЛП.

пВЯЕЛФ ЛМБУУБ ВЕЪ ЛПОУФТХЛФПТПЧ НПЦОП ЙОЙГЙБМЙЪЙТПЧБФШ РХФЕН РТЙУЧБЙЧБОЙС ЕНХ ДТХЗПЗП ПВЯЕЛФБ ЬФПЗП ЛМБУУБ. ьФП НПЦОП ДЕМБФШ Й ФПЗДБ, ЛПЗДБ ЛПОУФТХЛФПТЩ ПРЙУБОЩ. оБРТЙНЕТ: date d = today; // ЙОЙГЙБМЙЪБГЙС РПУТЕДУФЧПН РТЙУЧБЙЧБОЙС

рП УХЭЕУФЧХ, ЙНЕЕФУС ЛПОУФТХЛФПТ РП ХНПМЮБОЙА, ПРТЕДЕМЕООЩК ЛБЛ РПВЙФПЧБС ЛПРЙС ПВЯЕЛФБ ФПЗП ЦЕ ЛМБУУБ. еУМЙ ДМС ЛМБУУБ X ФБЛПК ЛПОУФТХЛФПТ РП ХНПМЮБОЙА ОЕЦЕМБФЕМЕО, ЕЗП НПЦОП РЕТЕПРТЕДЕМЙФШ ЛПОУФТХЛФПТПН У ЙНЕОЕН X(X&). ьФП ВХДЕФ ПВУХЦДБФШУС Ч #6.6. 5.2.5 пЮЙУФЛБ пРТЕДЕМСЕНЩК РПМШЪПЧБФЕМЕН ФЙР ЮБЭЕ ЙНЕЕФ, ЮЕН ОЕ ЙНЕЕФ, ЛПОУФТХЛФПТ, ЛПФПТЩК ПВЕУРЕЮЙЧБЕФ ОБДМЕЦБЭХА ЙОЙГЙБМЙЪБГЙА. дМС НОПЗЙИ ФЙРПЧ ФБЛЦЕ ФТЕВХЕФУС ПВТБФОПЕ ДЕКУФЧЙЕ, ДЕУФТХЛФПТ, ЮФПВЩ ПВЕУРЕЮЙФШ УППФЧЕФУФЧХАЭХА ПЮЙУФЛХ ПВЯЕЛФПЧ ЬФПЗП ФЙРБ. йНС ДЕУФТХЛФПТБ ДМС ЛМБУУБ X ЕУФШ ~X() ("ДПРПМОЕОЙЕ ЛПОУФТХЛФПТБ"). ч ЮБУФОПУФЙ, НОПЗЙЕ ФЙРЩ ЙУРПМШЪХАФ ОЕЛПФПТЩК ПВЯЕН РБНСФЙ ЙЪ УЧПВПДОПК РБНСФЙ (УН. #3.2.6), ЛПФПТЩК ЧЩДЕМСЕФУС ЛПОУФТХЛФПТПН Й ПУЧПВПЦДБЕФУС ДЕУФТХЛФПТПН. чПФ, ОБРТЙНЕТ, ФТБДЙГЙПООЩК УФЕЛПЧЩК ФЙР, ЙЪ ЛПФПТПЗП ДМС ЛТБФЛПУФЙ РПМОПУФША ЧЩВТПЫЕОБ ПВТБВПФЛБ ПЫЙВПЛ: class char_stack { int size; char* top; char* s; public: char_stack(int sz) { top=s=new char[size=sz]; } ~char_stack() { delete s; } // ДЕУФТХЛФПТ void push(char c) { *top++ = c; } char pop() { return *--top;} }

лПЗДБ char_stack ЧЩИПДЙФ ЙЪ ПВМБУФЙ ЧЙДЙНПУФЙ, ЧЩЪЩЧБЕФУС ДЕУФТХЛФПТ: void f() { char_stack s1(100); char_stack s2(200); s1.push('a'); s2.push(s1.pop()); char ch = s2.pop(); cout string) == 0) return n; if (ins == 0) error("ЙНС ОЕ ОБКДЕОП"); name* nn = new name; nn->string = new char[strlen(p)+1]; strcpy(nn->string,p); nn->value = 1; nn->next = tbl; tbl = nn; return nn; }

фЕРЕТШ ТБУУНПФТЙН ЛМБУУ table, ХУПЧЕТЫЕОУФЧПЧБООЩК ФБЛЙН ПВТБЪПН, ЮФПВЩ ЙУРПМШЪПЧБФШ ИЬЫЙТПЧБООЩК РТПУНПФТ, ЛБЛ ЬФП ДЕМБМПУШ Ч РТЙНЕТЕ У ОБУФПМШОЩН ЛБМШЛХМСФПТПН. уДЕМБФШ ЬФП ФТХДОЕЕ ЙЪ-ЪБ ФПЗП ПЗТБОЙЮЕОЙС, ЮФП ХЦЕ ОБРЙУБООЩЕ РТПЗТБННЩ, Ч ЛПФПТЩИ ЙУРПМШЪПЧБМБУШ ФПМШЛП ЮФП ПРТЕДЕМЕООБС ЧЕТУЙС ЛМБУУБ table, ДПМЦОЩ ПУФБЧБФШУС ЧЕТОЩНЙ ВЕЪ ЙЪНЕОЕОЙК: class table { name** tbl; int size; public: table(int sz = 15); ~table(); name* look(char*, int = 0); name* insert(char* s) { return look(s,1); } };

ч УФТХЛФХТХ ДБООЩИ Й ЛПОУФТХЛФПТ ЧОЕУЕОЩ ЙЪНЕОЕОЙС, ПФТБЦБАЭЙЕ ОЕПВИПДЙНПУФШ ФПЗП, ЮФП РТЙ ЙУРПМШЪПЧБОЙЙ ИЬЫЙТПЧБОЙС ФБВМЙГБ ДПМЦОБ ЙНЕФШ ПРТЕДЕМЕООЩК ТБЪНЕТ. ъБДБОЙЕ ЛПОУФТХЛФПТБ У РБТБНЕФТПН РП ХНПМЮБОЙА ПВЕУРЕЮЙЧБЕФ, ЮФП УФБТБС РТПЗТБННБ, Ч ЛПФПТПК ОЕ ХЛБЪЩЧБМУС ТБЪНЕТ ФБВМЙГЩ, ПУФБОЕФУС РТБЧЙМШОПК. рБТБНЕФТЩ РП ХНПМЮБОЙА ПЮЕОШ РПМЕЪОЩ Ч УЙФХБГЙЙ, ЛПЗДБ ОХЦОП ЙЪНЕОЙФШ ЛМБУУ ОЕ РПЧМЙСЧ ОБ УФБТЩЕ РТПЗТБННЩ. фЕРЕТШ ЛПОУФТХЛФПТ Й ДЕУФТХЛФПТ УПЪДБАФ Й ХОЙЮФПЦБАФ ИЬЫ-ФБВМЙГЩ: table::table(int sz) { if (sz < 0) error("ПФТЙГБФЕМШОЩК ТБЪНЕТ ФБВМЙГЩ"); tbl = new name*[size=sz]; for (int i = 0; inext) { delete n->string; delete n; } delete tbl; }

пРЙУБЧ ДЕУФТХЛФПТ ДМС ЛМБУУБ name НПЦОП РПМХЮЙФШ ВПМЕЕ РТПУФПК Й СУОЩК ЧБТЙБОФ table::~table(). жХОЛГЙС РТПУНПФТБ РТБЛФЙЮЕУЛЙ ЙДЕОФЙЮОБ ФПК, ЛПФПТБС ЙУРПМШЪПЧБМБУШ Ч РТЙНЕТЕ ОБУФПМШОПЗП ЛБМШЛХМСФПТБ (#3.1.3): #include name* table::look(char* p, int ins) { int ii = 0; char* pp = p; while (*pp) ii = iistring) == 0) return n; if (ins == 0) error("ЙНС ОЕ ОБКДЕОП"); name* nn = new name; nn->string = new char[strlen(p)+1]; strcpy(nn->string,p); nn->value = 1; nn->next = tbl[ii]; tbl[ii] = nn; return nn; }

пЮЕЧЙДОП, ЮФП ЖХОЛГЙЙ ЮМЕОЩ ЛМБУУБ ДПМЦОЩ ЪБОПЧП ЛПНРЙМЙТПЧБФШУС ЧУЕЗДБ, ЛПЗДБ ЧОПУЙФУС ЛБЛПЕ-МЙВП ЙЪНЕОЕОЙЕ Ч ПРЙУБОЙЕ ЛМБУУБ. ч ЙДЕБМЕ ФБЛПЕ ЙЪНЕОЕОЙЕ ОЙЛБЛ ОЕ ДПМЦОП ПФТБЦБФШУС ОБ РПМШЪПЧБФЕМСИ ЛМБУУБ. л УПЦБМЕОЙА, ЬФП ОЕ ФБЛ. дМС ТБЪНЕЭЕОЙС РЕТЕНЕООПК ЛМБУУПЧПЗП ФЙРБ ЛПНРЙМСФПТ ДПМЦЕО ЪОБФШ ТБЪНЕТ ПВЯЕЛФБ ЛМБУУБ. еУМЙ ТБЪНЕТ ЬФЙИ ПВЯЕЛФПЧ НЕОСЕФУС, ФП ЖБКМЩ, Ч ЛПФПТЩИ ЛМБУУ ЙУРПМШЪХЕФУС, ОХЦОП ЛПНРЙМЙТПЧБФШ ЪБОПЧП. нПЦОП ОБРЙУБФШ ФБЛХА РТПЗТБННХ (Й ПОБ ХЦЕ ОБРЙУБОБ), ЛПФПТБС ПРТЕДЕМСЕФ НОПЦЕУФЧП (НЙОЙНБМШОПЕ) ЖБКМПЧ, ЛПФПТПЕ ОЕПВИПДЙНП ЛПНРЙМЙТПЧБФШ ЪБОПЧП РПУМЕ ЙЪНЕОЕОЙС ПРЙУБОЙС ЛМБУУБ, ОП РПЛБ ЮФП ЫЙТПЛПЗП ТБУРТПУФТБОЕОЙС ПОБ ОЕ РПМХЮЙМБ.

рПЮЕНХ, НПЦЕФЕ ЧЩ УРТПУЙФШ, C++ ТБЪТБВПФБО ФБЛ, ЮФП РПУМЕ ЙЪНЕОЕОЙС ЪБЛТЩФПК ЮБУФЙ ОЕПВИПДЙНБ ОПЧБС ЛПНРЙМСГЙС РПМШЪПЧБФЕМЕК ЛМБУУБ? й ДЕКУФЧЙФЕМШОП, РПЮЕНХ ЧППВЭЕ ЪБЛТЩФБС ЮБУФШ ДПМЦОБ ВЩФШ РТЕДУФБЧМЕОБ Ч ПРЙУБОЙЙ ЛМБУУБ? дТХЗЙНЙ УМПЧБНЙ, ТБЪ РПМШЪПЧБФЕМСН ЛМБУУБ ОЕ ТБЪТЕЫБЕФУС ПВТБЭБФШУС Л ЪБЛТЩФЩН ЮМЕОБН, РПЮЕНХ ЙИ ПРЙУБОЙС ДПМЦОЩ РТЙЧПДЙФШУС Ч ЪБЗПМПЧПЮОЩИ ЖБКМБИ, ЛПФПТЩЕ, ЛБЛ РТЕДРПМБЗБЕФУС, РПМШЪПЧБФЕМШ ЮЙФБЕФ? пФЧЕФ - ЬЖЖЕЛФЙЧОПУФШ. чП НОПЗЙИ УЙУФЕНБИ Й РТПГЕУУ ЛПНРЙМСГЙЙ, Й РПУМЕДПЧБФЕМШОПУФШ ПРЕТБГЙК, ТЕБМЙЪХАЭЙИ ЧЩЪПЧ ЖХОЛГЙЙ, РТПЭЕ, ЛПЗДБ ТБЪНЕТ БЧФПНБФЙЮЕУЛЙИ ПВЯЕЛФПЧ (ПВЯЕЛФПЧ Ч УФЕЛЕ) ЙЪЧЕУФЕО ЧП ЧТЕНС ЛПНРЙМСГЙЙ.

ьФПК УМПЦОПУФЙ НПЦОП ЙЪВЕЦБФШ, РТЕДУФБЧЙЧ ЛБЦДЩК ПВЯЕЛФ ЛМБУУБ ЛБЛ ХЛБЪБФЕМШ ОБ "ОБУФПСЭЙК" ПВЯЕЛФ. фБЛ ЛБЛ ЧУЕ ЬФЙ ХЛБЪБФЕМЙ ВХДХФ ЙНЕФШ ПДЙОБЛПЧЩК ТБЪНЕТ, Б ТБЪНЕЭЕОЙЕ "ОБУФПСЭЙИ" ПВЯЕЛФПЧ НПЦОП ПРТЕДЕМЙФШ Ч ЖБКМЕ, ЗДЕ ДПУФХРОБ ЪБЛТЩФБС ЮБУФШ, ФП ЬФП НПЦЕФ ТЕЫЙФШ РТПВМЕНХ. пДОБЛП ТЕЫЕОЙЕ РПДТБЪХНЕЧБЕФ ДПРПМОЙФЕМШОЩЕ УУЩМЛЙ РП РБНСФЙ РТЙ ПВТБЭЕОЙЙ Л ЮМЕОБН ЛМБУУБ, Б ФБЛЦЕ, ЮФП ЕЭЕ ИХЦЕ, ЛБЦДЩК ЧЩЪПЧ ЖХОЛГЙЙ У БЧФПНБФЙЮЕУЛЙН ПВЯЕЛФПН ЛМБУУБ ЧЛМАЮБЕФ РП НЕОШЫЕК НЕТЕ ПДЙО ЧЩЪПЧ РТПЗТБНН ЧЩДЕМЕОЙС Й ПУЧПВПЦДЕОЙС УЧПВПДОПК РБНСФЙ. ьФП УДЕМБМП ВЩ ФБЛЦЕ ОЕЧПЪНПЦОЩН ТЕБМЙЪБГЙА inline-ЖХОЛГЙК ЮМЕОПЧ, ЛПФПТЩЕ ПВТБЭБАФУС Л ДБООЩН ЪБЛТЩФПК ЮБУФЙ. вПМЕЕ ФПЗП, ФБЛПЕ ЙЪНЕОЕОЙЕ УДЕМБЕФ ОЕЧПЪНПЦОЩН УПЧНЕУФОХА ЛПНРПОПЧЛХ C Й C++ РТПЗТБНН (РПУЛПМШЛХ C ЛПНРЙМСФПТ ПВТБВБФЩЧБЕФ struct ОЕ ФБЛ, ЛБЛ ЬФП ВХДЕФ ДЕМБФШ C++ ЛПНРЙМСФПТ). дМС C++ ЬФП ВЩМП УПЮФЕОП ОЕРТЙЕНМЕНЩН. 5.3.2 ъБЛПОЮЕООЩК лМБУУ рТПЗТБННЙТПЧБОЙЕ ВЕЪ УЛТЩФЙС ДБООЩИ (У РТЙНЕОЕОЙЕН УФТХЛФХТ) ФТЕВХЕФ НЕОШЫЕК РТПДХНБООПУФЙ, ЮЕН РТПЗТБННЙТПЧБОЙЕ УП УЛТЩФЙЕН ДБООЩИ (У ЙУРПМШЪПЧБОЙЕН ЛМБУУПЧ). уФТХЛФХТХ НПЦОП ПРТЕДЕМЙФШ ОЕ УМЙЫЛПН ЪБДХНЩЧБСУШ П ФПН, ЛБЛ ЕЕ РТЕДРПМБЗБЕФУС ЙУРПМШЪПЧБФШ. б ЛПЗДБ ПРТЕДЕМСЕФУС ЛМБУУ, ЧУЕ ЧОЙНБОЙЕ УПУТЕДПФБЮЙЧБЕФУС ОБ ПВЕУРЕЮЕОЙЙ ОПЧПЗП ФЙРБ РПМОЩН НОПЦЕУФЧПН ПРЕТБГЙК; ЬФП ЧБЦОПЕ УНЕЭЕОЙЕ БЛГЕОФБ. чТЕНС, РПФТБЮЕООПЕ ОБ ТБЪТБВПФЛХ ОПЧПЗП ФЙРБ, ПВЩЮОП НОПЗПЛТБФОП ПЛХРБЕФУС РТЙ ТБЪТБВПФЛЕ Й ФЕУФЙТПЧБОЙЙ РТПЗТБННЩ.

чПФ РТЙНЕТ ЪБЛПОЮЕООПЗП ФЙРБ intset, ЛПФПТЩК ТЕБМЙЪХЕФ РПОСФЙЕ "НОПЦЕУФЧП ГЕМЩИ": class intset { int cursize, maxsize; int *x; public: intset(int m, int n); // УБНПЕ ВПМШЫЕЕ, m int'ПЧ Ч 1..n ~intset(); int member(int t); // СЧМСЕФУС МЙ t ЬМЕНЕОФПН? void insert(int t); // ДПВБЧЙФШ "t" Ч НОПЦЕУФЧП void iterate(int& i) { i = 0; } int ok(int& i) { return i void error(char* s) { cerr ok(var)) cout next(var)

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