Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ БОМ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 4

Автор Π”ΠΎΠ½Π°Π»ΡŒΠ΄ Бокс

На ΡΡŽΠΆΠ΅Ρ‚ этой ΠΊΠ½ΠΈΠ³ΠΈ сильно повлияло ΠΌΠΎΠ΅ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈΠ΅ БОМ Π² DevelopMentor Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… послСдних Π»Π΅Ρ‚. Π­Ρ‚ΠΎΡ‚ ΡΡŽΠΆΠ΅Ρ‚ формировался студСнтами Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΌΠ΅Ρ€Π΅, ΠΊΠ°ΠΊ ΠΈ ΠΌΠΎΠΈΠΌΠΈ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ-прСподаватСлями. Π― ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ студСнта. Эддисон Уэсли (Addison Wesley) ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ» авторскоС прСдисловиС всСго лишь Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒΡŽ страницами, я Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ Π½Ρ‹Π½Π΅ΡˆΠ½ΠΈΠΉ состав DevelopMentor, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³ ΠΌΠ½Π΅ ΠΎΡ‚Ρ‚ΠΎΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Essential БОМ посрСдством прСподавания ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ курса ΠΈ обСспСчСниСм бСсцСнной ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи: Π ΠΎΠ½Π° Π‘ΡƒΠΌΠΈΠ΄Ρƒ (Ron Sumida), Π€Ρ€ΠΈΡ†Π° Ониона (Fritz Onion), Π‘ΠΊΠΎΡ‚Ρ‚Π° Π‘Π°Ρ‚Π»Π΅Ρ€Π° (Scott Butler), ΠžΡƒΡΠ½Π° Π’ΠΎΠ»ΠΌΠ°Π½Π° (Owen Tallman), Π”ΠΆΠΎΡ€Π΄ΠΆΠ° Π¨Π΅Ρ„Π΅Ρ€Π΄Π° (George Shepherd), Вэда ΠŸΡΡ‚Ρ‚ΠΈΡΠΎΠ½Π° (Ted Pattison), ΠšΠ΅ΠΉΡ‚ Π‘Ρ€Π°ΡƒΠ½ (Keith Brown), Π’ΠΈΠΌΠ° Π­Π²Π°Π»Π΄Π° (Tim Ewald) ΠΈ ΠšΡ€ΠΈΡΠ° БСллса (Chris Sells). Бпасибо Π²Π°ΠΌ, рСбята! Мои благодарности Ρ‚Π°ΠΊΠΆΠ΅ ΠœΠ°ΠΉΠΊΡƒ Π­Π±Π΅Ρ€ΠΊΡ€ΠΎΠΌΠ±ΠΈ (Mike Abercrombie) ΠΈΠ· DevelopMentor Π·Π° созданиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ окруТСния, Π³Π΄Π΅ Π½Π°ΡƒΡ‡Π½Ρ‹ΠΉ рост участника Π½Π΅ сдСрТивался ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠ΅ΠΉ.

Книга ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅, Ссли Π±Ρ‹ Π½Π΅ Π’Π΅Ρ€Ρ€ΠΈ КСннСди (Terry Kennedy) ΠΈ Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ·ΡŒΡ ΠΈΠ· Software AG. Π’Π΅Ρ€Ρ€ΠΈ Π±Ρ‹Π» вСсьма любСзСн, пригласив мСня Π² Π“Π΅Ρ€ΠΌΠ°Π½ΠΈΡŽ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΈΠΌ с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΏΠΎ DCOM/UNIX ΠΊΠ°ΠΊ Ρ€Π°Π· Π²ΠΎ врСмя Π³ΠΎΠ΄ΠΈΡ‡Π½ΠΎΠ³ΠΎ отпуска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π²Ρ‹Ρ€Π²Π°Π» ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для написания этой ΠΊΠ½ΠΈΠ³ΠΈ. Π₯отя ΠΊΠ½ΠΈΠ³Π° ΠΈ Π²Ρ‹ΡˆΠ»Π° Π³ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я Π½Π΅ ΠΌΠΎΠ³ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π’Π΅Ρ€Ρ€ΠΈ Β«Π½Π΅Ρ‚Β» (это моя Π²ΠΈΠ½Π°, Π° Π½Π΅ Π’Π΅Ρ€Ρ€ΠΈ), Π½ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ нСсравнСнно Π»ΡƒΡ‡ΡˆΠ΅ благодаря Ρ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я ΠΏΡ€ΠΎΠ²Π΅Π» Π·Π° ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. Π’ частности, я Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ усилил свою ΠΈΠ½Ρ‚ΡƒΠΈΡ†ΠΈΡŽ, работая с Π₯Π°Ρ€Π°Π»Π΄ΠΎΠΌ Π‘Ρ‚ΠΈΠ»ΠΎΠΌ (Harald Stiehl), Π’ΠΈΠ½Π½ΠΈ Π€Ρ€ΠΎΠ»ΠΈΡ… (Winnie Froehlich), Π€ΠΎΠ»ΠΊΠ΅Ρ€ΠΎΠΌ Π”Π΅Π½ΠΊΡ…Π°ΡƒΠ·ΠΎΠΌ (Volker Denkhaus), Π”ΠΈΡ‚ΠΌΠ°Ρ€ΠΎΠΌ Π“Ρ‘Ρ‚Π½Π΅Ρ€ΠΎΠΌ (Deitmar Gaeitner), Π”ΠΆΠ΅Ρ„Ρ„ΠΎΠΌ Π›ΠΈ (Jeff Lee), Π”Π΅ΠΉΡ‚Π΅Ρ€ΠΎΠΌ ΠšΠ΅ΡΠ»Π΅Ρ€ΠΎΠΌ (Deiter Kesler), ΠœΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΌ ΠšΠΎΡ…ΠΎΠΌ (Martin Koch), Блауэром Ауфом (Blauer Aff), Π£Π»ΠΈ КСссом (Uli Kaess), Π‘Ρ‚ΠΈΠ²ΠΎΠΌ Π£Π°ΠΉΠ»Π΄ΠΎΠΌ (Steve Wild) ΠΈ прославлСнным Вомасом Π’ΠΎΠ³Π»Π΅Ρ€ΠΎΠΌ (Thomas Vogler).

ΠžΡΠΎΠ±Ρ‹Π΅ благодарности Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ читатСлям, нашСдшим ошибки Π² ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ… изданиях этой ΠΊΠ½ΠΈΠ³ΠΈ: Вэду НСффу (Ted Neff), Дэну ΠœΠΎΠΉΠ΅Ρ€Ρƒ (Dan Moyer), ΠŸΡƒΡ€ΡƒΡˆΡƒ Π ΡƒΠ΄Ρ€Π΅ΠΊΡˆΠ°Π»Π΅ (Purush Rudrakshala), Π₯Π΅Π½Π³Ρƒ Π΄Π΅ ΠšΠΎΠ½Π΅Π½Π³Ρƒ (Heng de Koneng), Дэйву Π₯эйлу (Dave Hale), Π”ΠΆΠΎΡ€Π΄ΠΆΡƒ Π Π΅ΠΉΠ»ΠΈ (George Reilly), Π‘Ρ‚ΠΈΠ²Ρƒ Π”Π΅-Лассусу (Steve DeLassus), Π£ΠΎΡ€Ρ€Π΅Π½Ρƒ Π―Π½Π³Ρƒ (Warren Young), Π”ΠΆΠ΅Ρ„Ρ„Ρƒ ΠŸΡ€ΠΎΡΠ°ΠΉΠ·Ρƒ (Jeff Prosise), Π ΠΈΡ‡Π°Ρ€Π΄Ρƒ Граймсу (Richard Grimes), Бэрри ΠšΠ»ΡΠ²Π΅Π½ΡΡƒ (Barry Klawans), ДТСймсу Π‘Π°ΡƒΠΌΠ΅Ρ€Ρƒ (James Bowmer), Π‘Ρ‚Π΅Ρ„Π°Π½Ρƒ Басу (Stephan Sas), ΠŸΠ΅Ρ‚Π΅Ρ€Ρƒ Заборски (Peter Zaborski), ΠšΡ€ΠΈΡΡ‚ΠΎΡ„Π΅Ρ€Ρƒ Π›. Π­ΠΊΠ΅Ρ€Π»ΠΈ (Christopher L. Akerley), Π ΠΎΠ±Π΅Ρ€Ρ‚Ρƒ Бруксу (Robert Brooks), Π”ΠΆΠΎΠ½Π°Ρ‚Π°Π½Ρƒ ΠŸΡ€Π°ΠΉΠ΅Ρ€Ρƒ (Jonathan Prior), АллСну ЧамбСрсу (Alien Chambers), Π’ΠΈΠΌΠΎ ΠšΠ΅Ρ‚Ρ‚ΡƒΠ½Π΅Π½Ρƒ (Timo Kettunen), Атулсу ΠœΠΎΠΈΠ΄Π΅ΠΊΠ°Ρ€Ρƒ (Atulx Mohidekar), ΠšΡ€ΠΈΡΡƒ Π₯иамсу (Chris Hyams), ΠœΠ°ΠΊΡΡƒ Π ΡƒΠ±ΠΈΠ½ΡˆΡ‚Π΅ΠΉΠ½Ρƒ (ΠœΠ°Ρ… Rubinstein), Брэди Π₯ΠΎΠΉΠ·ΠΈΠ½Π³Π΅Ρ€Ρƒ (Bradey Honsinger), Π‘Π°Π½Π½ΠΈ Вомасу (Sunny Thomas), Π“Π°Ρ€Π΄Π½Π΅Ρ€Ρƒ Ρ„ΠΎΠ½ Π₯ΠΎΠ»Ρ‚Ρƒ (Gardner von Holt) ΠΈ Π’ΠΎΠ½ΠΈ ВСрвилосу (Tony Vervilos).

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, спасибо Π¨Π°Ρ…Ρƒ Π”ΠΆΠ΅Ρ…Π°Π½Ρƒ (Shah Jehan) ΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠΈ Β«Coca-ColaΒ» Π·Π° Π·Π°ΠΏΡ€Π°Π²ΠΊΡƒ этой Π·Π°Ρ‚Π΅ΠΈ Π³ΠΎΡ€ΡŽΡ‡ΠΈΠΌ Π² Π²ΠΈΠ΄Π΅ производства соотвСтствСнно прСвосходной индийской ΠΏΠΈΡ‰ΠΈ ΠΈ доступных Π±Π΅Π·Π°Π»ΠΊΠΎΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π½Π°ΠΏΠΈΡ‚ΠΊΠΎΠ².

Π”ΠΎΠ½ Бокс

Redondo Beach, CA

Август 1997 Π³ΠΎΠ΄Π°

http://www.develop.com/dbox


ΠžΡ‚ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ этой нСпростой ΠΊΠ½ΠΈΠ³ΠΈ ΠΎ нСпростой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΡ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ авторский ΡΡ‚ΠΈΠ»ΡŒ, Π½Π΅ потСряв ΠΏΡ€ΠΈ этом ясности излоТСния. Насколько это ΡƒΠ΄Π°Π»ΠΎΡΡŒ, ΡΡƒΠ΄ΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ.

РСдакция Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΡΠΎΠ±ΡƒΡŽ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ Π•Π»Π΅Π½Π΅ Π€ΠΈΠ»ΠΈΠΏΠΏΠΎΠ²ΠΎΠΉ, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Β«ΠšΠΎΡ€ΠΎΠ»Π΅Π²ΡΡ‚Π²ΠΎ DelphiΒ» ( http://delphi.vitpc.com ), ΠΈ АртСму ΠΡ€Ρ‚Π΅ΠΌΡŒΠ΅Π²Ρƒ, Π²Π΅Π΄ΡƒΡ‰Π΅ΠΌΡƒ программисту Ρ„ΠΈΡ€ΠΌΡ‹ Data Art, Π·Π° ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠ½ΠΈΠ³ для издания.

Π’Π°ΡˆΠΈ замСчания, прСдлоТСния, вопросы отправляйтС ΠΏΠΎ адрСсу элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ [email protected] (ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Β«ΠŸΠΈΡ‚Π΅Ρ€Β», ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ рСдакция).

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π΄Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ вашС ΠΌΠ½Π΅Π½ΠΈΠ΅!

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°ΡˆΠΈΡ… ΠΊΠ½ΠΈΠ³Π°Ρ… Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° Web-сайтС ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° http://www.piter.com .

ВсС исходныС тСксты, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² ΠΊΠ½ΠΈΠ³Π΅, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΠΎ адрСсу http://www.piter.com/download


Π“Π»Π°Π²Π° 1. БОМ ΠΊΠ°ΠΊ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ C++

template <class Π’, class Ex>

class listt: virtual protected CPrivateAlloc {

list<T**> mlist;

mutable TWnd mwnd;

virtual ~listt(void);

protected:

explicit listt(int nElems, …);

inline operator unsigned int *(void) const

{ return reinterpretcast <int*>(this) ; }

template <class X> void clear(X& rx) const throw(Ex);

};

Аноним, 1996

C++ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ с Π½Π°ΠΌΠΈ. БообщСство программистов Π½Π° C++ вСсьма ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎ, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΡŽΡ‚ ΠΎ западнях ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… камнях языка. Π―Π·Ρ‹ΠΊ C++ Π±Ρ‹Π» создан высоко ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, работая Π² Bell Laboratories, выпустили Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ C++ (CFRONT), Π½ΠΎ ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ конструктивных Ρ€Π°Π±ΠΎΡ‚ ΠΎ C++. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ» языка C++ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ 1980-Ρ… ΠΈ Π½Π°Ρ‡Π°Π»Π΅ 1990-Ρ… Π³ΠΎΠ΄ΠΎΠ². Π’ этот ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ C++ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² практичСски ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ C++) Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станциях UNIX ΠΈ создавали довольно ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹Π΅ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ компиляции ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Ясно, Ρ‡Ρ‚ΠΎ срСда, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ это ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ программистов, Π±Ρ‹Π»Π° Π² основном создана ΡƒΠΌΠ°ΠΌΠΈ всСго сообщСства C++.

Одной ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ языка C++ являлось ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ программистам ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (user-defined types – UDTs), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½Π΅ ΠΈΡ… исходного контСкста. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π»Π΅Π³ Π² основу ΠΈΠ΄Π΅ΠΈ создания Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ классов, ΠΈΠ»ΠΈ структур, ΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΈΡ… сСгодня. Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° появлСния C++ Ρ€Ρ‹Π½ΠΎΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ классов C++ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ»ΡΡ, хотя ΠΈ довольно ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Одной ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Ρ‚ΠΎΠ³ΠΎ. Ρ‡Ρ‚ΠΎ этот Ρ€Ρ‹Π½ΠΎΠΊ рос Π½Π΅ Ρ‚Π°ΠΊ быстро, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Π±Ρ‹Π» NIH-Ρ„Π°ΠΊΡ‚ΠΎΡ€ (not invented here – Β«ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ Π½Π΅ здСсь») срСди Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² C++. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² часто прСдставляСтся Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ воспроизвСдСниС собствСнных Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ. Иногда это прСдставлСниС базируСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° высокомСрии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях сопротивлСниС использованию Ρ‡ΡƒΠΆΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° проистСкаСт ΠΈΠ· нСизбСТности Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ умствСнного усилия, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для понимания Ρ‡ΡƒΠΆΠΎΠΉ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ стиля программирования. Π­Ρ‚ΠΎ особСнно Π²Π΅Ρ€Π½ΠΎ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ-ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΊ (wrappers), ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΎ, Π½ΠΎ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ абстракции, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ самой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.

Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ составлСны с расчСтом Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ Π΄Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°ΠΊ ΠΊ эталону. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Β«Π±Π΅Π»ΠΎΠ³ΠΎ ящика» часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌΡƒ количСству связСй ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ классов, Ρ‡Ρ‚ΠΎ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ усиливаСт Π½Π΅ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ„Ρ„Π΅ΠΊΡ‚ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ связи ослабляСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов ΠΈ услоТняСт Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΡŽ ΠΊ измСнСниям Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ основной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠ°ΠΊ всСго лишь ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· частСй исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ фактичСски ΠΏΠΎΠ΄Π³ΠΎΠ½ΡΡŽΡ‚ коммСрчСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов ΠΏΠΎΠ΄ собствСнныС Π½ΡƒΠΆΠ΄Ρ‹, выпуская Β«ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽΒ», которая Π»ΡƒΡ‡ΡˆΠ΅ приспособлСна ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ, Π½ΠΎ ΡƒΠΆΠ΅ Π½Π΅ являСтся ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС (reuse) ΠΊΠΎΠ΄Π° всСгда Π±Ρ‹Π»ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· классичСских ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ориСнтирования. НСсмотря Π½Π° это ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, написаниС классов C++, простых для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, довольно Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Помимо Ρ‚Π°ΠΊΠΈΡ… прСпятствий для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, ΠΊΠ°ΠΊ этап проСктирования (design-time) ΠΈ этап Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (development-time), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρ‹ C++, сущСствуСт ΠΈ довольно большоС число прСпятствий Π½Π° этапС выполнСния (runtime), Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль C++ Π΄Π°Π»Π΅ΠΊΠΎΠΉ ΠΎΡ‚ ΠΈΠ΄Π΅Π°Π»Π° для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования. МногиС ΠΈΠ· этих прСпятствий обусловлСны модСлями компиляции ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, принятой Π² C++. Данная Π³Π»Π°Π²Π° Π±ΡƒΠ΄Π΅Ρ‚ посвящСна тСхничСским ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ привСдСния классов C++ ΠΊ Π²ΠΈΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования. ВсС Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… общСдоступных (off-the-shelf) тСхнологиях. Π’ этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ, примСняя эти Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, которая позволяла Π±Ρ‹ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΈ эффСктивно ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ систСмы ΠΈΠ· нСзависимо сконструированных Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².


РаспространСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ язык Π‘++

Для понимания ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с использованиСм C++ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΠ»ΠΈΡΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C++ Π² ΠΊΠΎΠ½Ρ†Π΅ 1980-Ρ… Π³ΠΎΠ΄ΠΎΠ². ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создал Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска подстрок Π·Π° врСмя O(1) (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ врСмя поиска постоянно, Π° Π½Π΅ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π΄Π»ΠΈΠ½Π΅ строки). Π­Ρ‚ΠΎ, ΠΊΠ°ΠΊ извСстно, Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π°Ρ‡Π°. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ простым для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс строк, основанный Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ быстро ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ тСкстовыС строки (fast text strings) Π² Π»ΡŽΠ±ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», содСрТащий ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса:


// faststring.h

class FastString

{

char *mpsz;

public:

FastString(const char *psz);