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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 33

Автор ΠœΡŽΡ€Ρ€Π΅ΠΉ Π₯ΠΈΠ»Π»

Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ срСдства, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт дСструктору Ρ€Π΅ΡˆΠΈΡ‚ΡŒ вопрос, Π±Ρ‹Π» Π»ΠΈ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создан с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new, Π½Π΅ имССтся, ΠΊΠ°ΠΊ Π½Π΅Ρ‚ ΠΈ срСдства, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π»Π° Π»ΠΈ Π΅Π³ΠΎ delete, ΠΈΠ»ΠΈ ΠΎΠ½ Π²Ρ‹Π·Π²Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, выходящим ΠΈΠ· области видимости. Если для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ это сущСствСнно, Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π³Π΄Π΅-Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для дСструктора. Π”Ρ€ΡƒΠ³ΠΎΠΉ способ – ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ обСспСчиваСт, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Если удаСтся ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ способ интрСса Π½Π΅ прСдставляСт.

Если Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ класс, являСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π΅Π³ΠΎ СдинствСнным ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ класс, исходя ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ Π΅Π³ΠΎ использовании. Когда класс разрабатываСтся для Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ использования, Ρ‚Π°ΠΊΠΈΡ… Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ.

5.5.8 ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π Π°Π·ΠΌΠ΅Ρ€Π°

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±Π΅Ρ€Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ распрСдСлСниСм ΠΈ ΠΎΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ памяти, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΎ врСмя компиляции Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ (ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ – ΠΏΠ΅Ρ€Π΅Π².) классы vector, stack, intset ΠΈ table Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊ структуры доступа фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, содСрТащиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΌΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для создания Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² свободной памяти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ памяти, ΠΈ Ρ‡Ρ‚ΠΎ любоС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΡΠ²Π΅Π½Π½ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ. НапримСр:

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; *) *);

Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса размСщаСтся Π² свободной ΠΏΠ°ΠΌΡ‚ΠΈ, это Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π’ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

class char_stack (* int size; char* top; char s[1]; public: char_stack(int sz); void push(char c) (* *top++ = c; *) char pop() (* return *–top; *) *);

char_stack::char_stack(int sz) (* if (this) error(«стСк Π½Π΅ Π² свободной памяти»); if (sz Β« 1) error(β€žΡ€Π°Π·ΠΌΠ΅Ρ€ стСка Β« 1β€œ); this = (char_stack*) new char[sizeof(char_stack)+sz-1]; size = sz; top = s; *)

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ дСструктор большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ char_stack, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ delete Π±Π΅Π· всякого содСйствия со стороны программиста.

5.6 УпраТнСния

1. (*1) ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΈΠ· Π“Π»Π°Π²Ρ‹ 3, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс table.

2. (*1) Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ tnode (#с.8.5) ΠΊΠ°ΠΊ класс с ΠΊΠΎΠ½Ρ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ, дСструкторами ΠΈ Ρ‚.ΠΏ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈΠ· tnode'ΠΎΠ² ΠΊΠ°ΠΊ класс с конструкторами, дСструкторами ΠΈ Ρ‚.ΠΏ.

3. (*1) ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ класс intset (#5.3.2) Π² мноТСство строк.

4. (*1) ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ класс intset Π² мноТСство ΡƒΠ·Π»ΠΎΠ² node, Π³Π΄Π΅ node – опрСдСляСмая Π²Π°ΠΌΠΈ структура.

5. (*3) ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ класс для Π°Π½Π°Π»ΠΈΠ·Π°, хранСния, вычислния ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ простых арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, состоящих ΠΈΠ· Ρ†Π΅Π»Ρ‹Ρ… констант ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ +, -, * ΠΈ /. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ итСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

class expr (* // ... public: expr(char*); int eval(); void print(); *) ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ строка конструктора expr::expr() являСтся Π²Ρ‹Ρ€ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Ѐункция expr::eval() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТния, Π° expr::print() ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ прСдставлСниС выраТСния Π² cout. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

expr x(Β«123/4+123*4-3Β»); cout Β«β€ž "x = " «« x.eval() «« Β«\nβ€œ; x.print();

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ класс expr Π΄Π²Π° Ρ€Π°Π·Π°: ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² кчСствС прСдставлСния связанный список ΡƒΠ·Π»ΠΎΠ², Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π· – ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ строку. ΠŸΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ выраТСния: с ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ расставлСнными скобками,Π² постфиксной записи,Π² ассСмблСрном ΠΊΠΎΠ΄Π΅ ΠΈ Ρ‚.Π΄.

6. (*1) ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ класс char_queue (символьная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ) Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ интСрфСйс Π½Π΅ зависСл ΠΎΡ‚ прСдставлСния. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ char_queue ΠΊΠ°ΠΊ (1) связанный список ΠΈ ΠΊΠ°ΠΊ (2) Π²Π΅ΠΊΡ‚ΠΎΡ€. О согласованности Π½Π΅ Π·Π°Π±ΠΎΡ‚Ρ‚Π΅ΡΡŒ.

7. (*2) ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ класс histogram (гистограмма), Π² ΠΊΡ‚ΠΎΡ€ΠΎΠΌ вСдСтся подсчСт чисСл Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ конструктора histogram. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΡŒΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ‹Π²ΠΎΠ΄Π° гистограммы Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ. Π‘Π΄Π΅Π»Π°Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, выходящих Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. Подсказка: Β«task.hΒ».

8. (*2) ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ нСсколько классов, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… случайныС числа с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ распрСдСлСниями. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс ΠΈΠΌΠ΅Π΅Ρ‚ конструктор, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ распрСдСлния, ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ draw, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Β«ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅Β» Π·Π½Ρ‡Π΅Π½ΠΈΠ΅. Подсказка: Β«task.hΒ». ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ класс intset.

9. (*2) ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ date (#5.8.2), ΠΏΡ€ΠΈΠΌΠ΅Ρ€ char_stack (#5.2.5) ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ intset (#5.3.2) Π½Π΅ исползуя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‡Π»Π΅Π½ΠΎΠ² (Π΄Π°ΠΆΠ΅ конструкторов ΠΈ дСструкторов). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ class ΠΈ friend. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ с вСрсиями, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использовались Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π»Π΅Π½Ρ‹.

10. (*3) Для ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ языка спроСктируйтС класс Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠΌΠ΅Π½ ΠΈ класс Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠΌΠ΅Π½. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ выглядит Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠΌΠ΅Π½, посмотритС Π½Π° компилятор этого языка.

11. (*2) ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ класс Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· УпраТнСния 5 Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ присваивния =. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ класс Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠΌΠ΅Π½ ΠΈΠ· УпраТнСния 10.

12. (*1) Π”Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

#include Β«stream.hΒ»

main() (* cout Β«β€ž Β«Hello, world\nβ€œ; *)

ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π΄Π°Ρ‡Ρƒ

Initialize Hello, world Clean up

НС Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² main().

Π“Π»Π°Π²Π° 6 ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

Π—Π΄Π΅ΡΡŒ водятся Π”Ρ€Π°ΠΊΠΎΠ½Ρ‹!

старинная ΠΊΠ°Ρ€Ρ‚Π°

Π’ этой Π³Π»Π°Π²Π΅ описываСтся Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚, прСдоставляСмый Π² Π‘++ для ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ смысл ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса. ΠšΡ€ΠΎΠΌΠ΅ арифмСтичСских, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ логичСскиС ΠΎΠΏΡ€Π°Ρ†ΠΈΠΈ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сравнСния, Π²Ρ‹Π·ΠΎΠ²Π° () ΠΈ индСксирования [], Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ присваиваниС ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Моно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ явноС ΠΈ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ опрСдСлямыми ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ основными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Показано, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π»ΠΈΡ‚ΡŒ класс, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊ ΠΈΠ½Π°Ρ‡Π΅ скопирован ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ функциями.

6.1 Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Часто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ прСдставлСниями абстрактных понятий. НапримСр, Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… int Π² Π‘++ вмСстС с опСрациями +, -, *, / ΠΈ Ρ‚.Π΄. прСдоставляСт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ) матСматичСского понтия Ρ†Π΅Π»Ρ‹Ρ… чисСл. Π’Π°ΠΊΠΈΠ΅ понятия ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя мнТСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π»ΡΡŽΡ‚ основныС дСйствия Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. К соТалСнию, язык программирования ΠΌΠΎΠΆΠ΅Ρ‚ нСпосрСдствСнно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ лишь ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎΠ΅ число Ρ‚Π°ΠΊΠΈΡ… понятий. НапримСр, Ρ‚Π°ΠΊΠΈΠ΅ понятия, ΠΊΠ°ΠΊ комплСксная Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°, матричная Π°Π»Π³Π΅Π±Ρ€Π°, логичСскиС сигналы ΠΈ строки Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ прямой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² Π‘++. ΠšΠ»Π°ΡΡΡ‹ Π΄Π°ΡŽΡ‚ срСдство спСцификации Π² Π‘++ прСдставлСния нСэлСмСнтарных ΠΎΠ±Π΅ΠΊΡ‚ΠΎΠ² вмСстС с мноТСством дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π΄ этими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. Иногда ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов, позволяСт программисту ΠΎΠ±Π΅ΡΠΏΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ½ΡΡ‚ΡƒΡŽ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ запись для манипуляции ΠΎΠ±Π΅ΠΊΡ‚Π°ΠΌΠΈ классов, Ρ‡Π΅ΠΌ Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ лишь ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ запись. НапримСр:

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 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

МоТно ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ значСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

+ – * / % ^ amp; ! ~ ! = Β« Β» += -= *= /= %= ^= amp;= != Β«β€ž β€œΒ» »»= Β«β€ž= == != Β«= β€œ= amp; amp; !! ++ – [] () new delete

ПослСдниС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ – это индСксированиС (#6.7), Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (#6.8), Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ свободной памяти ΠΈ освобоТдСниС свободной памяти (#3.2.6). Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ пСрСчислСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ синтаксис Π²Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. НСльзя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠ½Π°Ρ€Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ % ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΡƒΡŽ !. НСвозмоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ лСксичСскиС символы ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½ΠΎ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° мноТСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ нСдостточно, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запись Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π˜ΡΠΏΠΎΠ»Π·ΡƒΠΉΡ‚Π΅ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ **, Π° pow(). Π­Ρ‚ΠΈ ограничСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ·Π°Ρ‚ΡŒΡΡ драконовскими, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ привСсти ΠΊ нСоднозначностям. НапримСр, Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ **, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅ΠΉ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, ΠΌΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΠΈ простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Π½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π·. Π”ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ ** ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π²Π»Π΅Π²ΠΎ (ΠΊΠ°ΠΊ Π² Π€ΠΎΡ€Ρ‚Ρ€Π°Π½Π΅) ΠΈΠ»ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ (ΠΊΠ°ΠΊ Π² АлголС)? Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ a**p Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ a*(*p) ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ (a)**(p)?

Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово operator (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, опСрация), Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт сама опСрация, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, operator««. Ѐункция опСрация описываСтся ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ любая другая функция. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ – это лишь сокращСнная запись явного Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. НапримСр:

void f(complex a, complex b) (* complex c = a + b; // сокращСнная запись complex d = operator+(a,b); // явный Π²Ρ‹Π·ΠΎΠ² *)