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

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

Автор Бтраустрап Π‘ΡŒΡΡ€Π½

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); // явный Π²Ρ‹Π·ΠΎΠ² *)

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ описания complex ΠΎΠ±Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Ρ‚ΠΎΡ€Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ синонимами.

6.2.1 Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΈ ΡƒΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

Бинарная опСрация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ функция Ρ‡Π»Π΅Π½, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ функция Π΄Ρ€ΡƒΠ³, ΠΏΠΎΠ»ΡƒΡ‡ΡŽΡ‰Π°Ρ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для любой Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Ρ†ΠΈΠΈ @ [email protected] ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ [email protected](bb), ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ [email protected](aa,bb). Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ±Π΅, Ρ‚ΠΎ [email protected] являСтся ошибкой. Унарная опСрация, прСфиксная ΠΈΠ»ΠΈ постфиксная, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ функция Ρ‡Π»Π΅Π½, Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ функция Π΄Ρ€ΡƒΠ³, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для любой ΡƒΠ½Π°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ @ aa @ ΠΈΠ»ΠΈ @aa ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ [email protected](), ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ [email protected](aa). Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Ρ‚ΠΎ ΠΈ [email protected], ΠΈ @aa ΡΠ²Π»ΡΡŽΡ‚ΡΡ ошибками. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: