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

вШСТО уФТБХУФТБР. чЧЕДЕОЙЕ Ч СЪЩЛ уЙ++, рЕТЕЗТХЪЛБ пРЕТБГЙК 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 уЕТЧЕТ йОЖПТНБГЙПООЩИ фЕИОПМПЗЙК УПДЕТЦЙФ НПТЕ(!) БОБМЙФЙЮЕУЛПК ЙОЖПТНБГЙЙ зМБЧБ 6 рЕТЕЗТХЪЛБ пРЕТБГЙК ъДЕУШ ЧПДСФУС дТБЛПОЩ! - УФБТЙООБС ЛБТФБ ч ЬФПК ЗМБЧЕ ПРЙУЩЧБЕФУС БРРБТБФ, РТЕДПУФБЧМСЕНЩК Ч C++ ДМС РЕТЕЗТХЪЛЙ ПРЕТБГЙК. рТПЗТБННЙУФ НПЦЕФ ПРТЕДЕМСФШ УНЩУМ ПРЕТБГЙК РТЙ ЙИ РТЙНЕОЕОЙЙ Л ПВЯЕЛФБН ПРТЕДЕМЕООПЗП ЛМБУУБ. лТПНЕ БТЙЖНЕФЙЮЕУЛЙИ, НПЦОП ПРТЕДЕМСФШ ЕЭЕ Й МПЗЙЮЕУЛЙЕ ПРЕТБГЙЙ, ПРЕТБГЙЙ УТБЧОЕОЙС, ЧЩЪПЧБ () Й ЙОДЕЛУЙТПЧБОЙС [], Б ФБЛЦЕ НПЦОП РЕТЕПРТЕДЕМСФШ РТЙУЧБЙЧБОЙЕ Й ЙОЙГЙБМЙЪБГЙА. нПЦОП ПРТЕДЕМЙФШ СЧОПЕ Й ОЕСЧОПЕ РТЕПВТБЪПЧБОЙЕ НЕЦДХ ПРТЕДЕМСЕНЩНЙ РПМШЪПЧБФЕМЕН Й ПУОПЧОЩНЙ ФЙРБНЙ. рПЛБЪБОП, ЛБЛ ПРТЕДЕМЙФШ ЛМБУУ, ПВЯЕЛФ ЛПФПТПЗП ОЕ НПЦЕФ ВЩФШ ОЙЛБЛ ЙОБЮЕ УЛПРЙТПЧБО ЙМЙ ХОЙЮФПЦЕО ЛТПНЕ ЛБЛ УРЕГЙБМШОЩНЙ ПРТЕДЕМЕООЩНЙ РПМШЪПЧБФЕМЕН ЖХОЛГЙСНЙ. 6.1 чЧЕДЕОЙЕ юБУФП РТПЗТБННЩ ТБВПФБАФ У ПВЯЕЛФБНЙ, ЛПФПТЩЕ СЧМСАФУС ЛПОЛТЕФОЩНЙ РТЕДУФБЧМЕОЙСНЙ БВУФТБЛФОЩИ РПОСФЙК. оБРТЙНЕТ, ФЙР ДБООЩИ int Ч C++ ЧНЕУФЕ У ПРЕТБГЙСНЙ +, -, *, / Й Ф.Д. РТЕДПУФБЧМСЕФ ТЕБМЙЪБГЙА (ПЗТБОЙЮЕООХА) НБФЕНБФЙЮЕУЛПЗП РПОСФЙС ГЕМЩИ ЮЙУЕМ. фБЛЙЕ РПОСФЙС ПВЩЮОП ЧЛМАЮБАФ Ч УЕВС НОПЦЕУФЧП ПРЕТБГЙК, ЛПФПТЩЕ ЛТБФЛП, ХДПВОП Й РТЙЧЩЮОП РТЕДУФБЧМСАФ ПУОПЧОЩЕ ДЕКУФЧЙС ОБД ПВЯЕЛФБНЙ. л УПЦБМЕОЙА, СЪЩЛ РТПЗТБННЙТПЧБОЙС НПЦЕФ ОЕРПУТЕДУФЧЕООП РПДДЕТЦЙЧБФШ МЙЫШ ПЮЕОШ НБМПЕ ЮЙУМП ФБЛЙИ РПОСФЙК. оБРТЙНЕТ, ФБЛЙЕ РПОСФЙС, ЛБЛ ЛПНРМЕЛУОБС БТЙЖНЕФЙЛБ, НБФТЙЮОБС БМЗЕВТБ, МПЗЙЮЕУЛЙЕ УЙЗОБМЩ Й УФТПЛЙ ОЕ РПМХЮЙМЙ РТСНПК РПДДЕТЦЛЙ Ч C++. лМБУУЩ ДБАФ УТЕДУФЧП УРЕГЙЖЙЛБГЙЙ Ч C++ РТЕДУФБЧМЕОЙС ОЕЬМЕНЕОФБТОЩИ ПВЯЕЛФПЧ ЧНЕУФЕ У НОПЦЕУФЧПН ДЕКУФЧЙК, ЛПФПТЩЕ НПЗХФ ОБД ЬФЙНЙ ПВЯЕЛФБНЙ ЧЩРПМОСФШУС. йОПЗДБ ПРТЕДЕМЕОЙЕ ФПЗП, ЛБЛ ДЕКУФЧХАФ ПРЕТБГЙЙ ОБ ПВЯЕЛФЩ ЛМБУУПЧ, РПЪЧПМСЕФ РТПЗТБННЙУФХ ПВЕУРЕЮЙФШ ВПМЕЕ ПВЭЕРТЙОСФХА Й ХДПВОХА ЪБРЙУШ ДМС НБОЙРХМСГЙЙ ПВЯЕЛФБНЙ ЛМБУУПЧ, ЮЕН ФБ, ЛПФПТХА НПЦОП ДПУФЙЮШ ЙУРПМШЪХС МЙЫШ ПУОПЧОХА ЖХОЛГЙПОБМШОХА ЪБРЙУШ. оБРТЙНЕТ: class complex { double re, im; public: complex(double r, double i) { re=r; im=i; } friend complex operator+(complex, complex); friend complex operator*(complex, complex); };

ПРТЕДЕМСЕФ РТПУФХА ТЕБМЙЪБГЙА РПОСФЙС ЛПНРМЕЛУОПЗП ЮЙУМБ, Ч ЛПФПТПК ЮЙУМП РТЕДУФБЧМСЕФУС РБТПК ЮЙУЕМ У РМБЧБАЭЕК ФПЮЛПК ДЧПКОПК ФПЮОПУФЙ, ТБВПФБ У ЛПФПТЩНЙ ПУХЭЕУФЧМСЕФУС РПУТЕДУФЧПН ПРЕТБГЙК + Й * (Й ФПМШЛП). рТПЗТБННЙУФ ЪБДБЕФ УНЩУМ ПРЕТБГЙК + Й * У РПНПЭША ПРТЕДЕМЕОЙС ЖХОЛГЙК У ЙНЕОБНЙ operator+ Й operator*. еУМЙ, ОБРТЙНЕТ, ДБОЩ b Й c ФЙРБ complex, ФП b+c ПЪОБЮБЕФ (РП ПРТЕДЕМЕОЙА) operator+(b,c). фЕРЕТШ ЕУФШ ЧПЪНПЦОПУФШ РТЙВМЙЪЙФШ ПВЭЕРТЙОСФХА ЙОФЕТРТЕФБГЙА ЛПНРМЕЛУОЩИ ЧЩТБЦЕОЙК. оБРТЙНЕТ: void f() { complex a = complex(1, 3.1); complex b = complex(1.2, 2); complex c = b; a = b+c; b = b+c*a; c = a*b+complex(1,2); }

чЩРПМОСАФУС ПВЩЮОЩЕ РТБЧЙМБ РТЙПТЙФЕФПЧ, РПЬФПНХ ЧФПТПК ПРЕТБФПТ ПЪОБЮБЕФ b=b+(c*a), Б ОЕ b=(b+c)*a. 6.2 жХОЛГЙЙ пРЕТБГЙЙ 6.2.1 вЙОБТОЩЕ Й хОБТОЩЕ пРЕТБГЙЙ 6.2.2 рТЕДПРТЕДЕМЕООЩЕ ъОБЮЕОЙС пРЕТБГЙК 6.2.3 пРЕТБГЙЙ Й пРТЕДЕМСЕНЩЕ рПМШЪПЧБФЕМЕН фЙРЩ нПЦОП ПРЙУЩЧБФШ ЖХОЛГЙЙ, ПРТЕДЕМСАЭЙЕ ЪОБЮЕОЙС УМЕДХАЭЙИ ПРЕТБГЙК: + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= > >>= buf) vec[buf]++; vec.print_all(); } 6.8 чЩЪПЧ жХОЛГЙЙ чЩЪПЧ ЖХОЛГЙЙ, ФП ЕУФШ ЪБРЙУШ ЧЩТБЦЕОЙЕ(УРЙУПЛ_ЧЩТБЦЕОЙК), НПЦОП РТПЙОФЕТРТЕФЙТПЧБФШ ЛБЛ ВЙОБТОХА ПРЕТБГЙА, Й ПРЕТБГЙА ЧЩЪПЧБ НПЦОП РЕТЕЗТХЦБФШ ФБЛ ЦЕ, ЛБЛ Й ДТХЗЙЕ ПРЕТБГЙЙ. уРЙУПЛ РБТБНЕФТПЧ ЖХОЛГЙЙ operator() ЧЩЮЙУМСЕФУС Й РТПЧЕТСЕФУС Ч УППФЧЕФУФЧЙЕ У ПВЩЮОЩНЙ РТБЧЙМБНЙ РЕТЕДБЮЙ РБТБНЕФТПЧ. рЕТЕЗТХЦБАЭБС ЖХОЛГЙС НПЦЕФ ПЛБЪБФШУС РПМЕЪОПК ЗМБЧОЩН ПВТБЪПН ДМС ПРТЕДЕМЕОЙС ФЙРПЧ У ЕДЙОУФЧЕООПК ПРЕТБГЙЕК Й ДМС ФЙРПЧ, Х ЛПФПТЩИ ПДОБ ПРЕТБГЙС ОБУФПМШЛП РТЕПВМБДБЕФ, ЮФП ДТХЗЙЕ Ч ВПМШЫЙОУФЧЕ УЙФХБГЙК НПЦОП ОЕ РТЙОЙНБФШ ЧП ЧОЙНБОЙЕ.

дМС ФЙРБ БУУПГЙБФЙЧОПЗП НБУУЙЧБ assoc НЩ ОЕ ПРТЕДЕМЙМЙ ЙФЕТБФПТ. ьФП НПЦОП УДЕМБФШ, ПРТЕДЕМЙЧ ЛМБУУ assoc_iterator, ТБВПФБ ЛПФПТПЗП УПУФПЙФ Ч ФПН, ЮФПВЩ Ч ПРТЕДЕМЕООПН РПТСДЛЕ РПУФБЧМСФШ ЬМЕНЕОФЩ ЙЪ assoc. йФЕТБФПТХ ОХЦЕО ДПУФХР Л ДБООЩН, ЛПФПТЩЕ ИТБОСФУС Ч assoc, РПЬФПНХ ПО УДЕМБО ДТХЗПН: class assoc { friend class assoc_iterator; pair* vec; int max; int free; public: assoc(int); int& operator[](char*); };

йФЕТБФПТ ПРТЕДЕМСЕФУС ЛБЛ class assoc_iterator{ assoc* cs; // ФЕЛХЭЙК НБУУЙЧ assoc int i; // ФЕЛХЭЙК ЙОДЕЛУ public: assoc_iterator(assoc& s) { cs = &s; i = 0; } pair* operator()() { return (ifree)? &cs->vec[i++] : 0; } };

оБДП ЙОЙГЙБМЙЪЙТПЧБФШ assoc_iterator ДМС НБУУЙЧБ assoc, РПУМЕ ЮЕЗП ПО ВХДЕФ ЧПЪЧТБЭБФШ ХЛБЪБФЕМШ ОБ ОПЧХА pair ЙЪ ЬФПЗП НБУУЙЧБ ЧУСЛЙК ТБЪ, ЛПЗДБ ЕЗП ВХДХФ БЛФЙЧЙЪЙТПЧБФШ ПРЕТБГЙЕК (). рП ДПУФЙЦЕОЙЙ ЛПОГБ НБУУЙЧБ ПО ЧПЪЧТБЭБЕФ 0: main() // УЮЙФБЕФ ЧИПЦДЕОЙС ЛБЦДПЗП УМПЧБ ЧП ЧЧПДЕ { const MAX = 256; // ВПМШЫЕ УБНПЗП ВПМШЫПЗП УМПЧБ char buf[MAX]; assoc vec(512); while (cin>>buf) vec[buf]++; assoc_iterator next(vec); pair* p; while ( p = next() ) cout name s, y.p->s) == 0; } friend int operator!=(string& x, char* s) {return strcmp(x.p->s, s) != 0; } friend int operator!=(string& x, string& y) {return strcmp(x.p->s, y.p->s) != 0; } };

лПОУФТХЛФПТЩ Й ДЕУФТХЛФПТЩ РТПУФЩ (ЛБЛ ПВЩЮОП): string::string() { p = new srep; p->s = 0; p->n = 1; } string::string(char* s) { p = new srep; p->s = new char[ strlen(s)+1 ]; strcpy(p->s, s); p->n = 1; } string::string(string& x) { x.p->n++; p = x.p; } string::~string() { if (--p->n == 0) { delete p->s; delete p; } }

лБЛ ПВЩЮОП, ПРЕТБГЙЙ РТЙУЧБЙЧБОЙС ПЮЕОШ РПИПЦЙ ОБ ЛПОУФТХЛФПТЩ. пОЙ ДПМЦОЩ ПВТБВБФЩЧБФШ ПЮЙУФЛХ УЧПЕЗП РЕТЧПЗП (МЕЧПЗП) ПРЕТБОДБ: string& string::operator=(char* s) { if (p->n > 1) { // ТБЪЯЕДЙОЙФШ УЕВС p-n--; p = new srep; } else if (p->n == 1) delete p->s; p->s = new char[ strlen(s)+1 ]; strcpy(p->s, s); p->n = 1; return *this; }

вМБЗПТБЪХНОП ПВЕУРЕЮЙФШ, ЮФПВЩ РТЙУЧБЙЧБОЙЕ ПВЯЕЛФБ УБНПНХ УЕВЕ ТБВПФБМП РТБЧЙМШОП: string& string::operator=(string& x) { x.p->n++; if (--p->n == 0) { delete p->s; delete p; } p = x.p; return *this; }

пРЕТБГЙС ЧЩЧПДБ ЪБДХНБОБ ФБЛ, ЮФПВЩ РТПДЕНПОУФТЙТПЧБФШ РТЙНЕОЕОЙЕ ХЮЕФБ УУЩМПЛ. пОБ РПЧФПТСЕФ ЛБЦДХА ЧЧПДЙНХА УФТПЛХ (У РПНПЭША ПРЕТБГЙЙ

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