ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Ооп. 
ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹ Π§Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° класса памяти static. Π§Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ static, раздСляСтся всСми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ своСго класса ΠΈ Ρ…ранится Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС. НСстатичСскиС Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра (Ρ‚.Π΅. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) класса. Если Π±Ρ‹ Π½Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ статичСских Ρ‡Π»Π΅Π½ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, свСдСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ всСм экзСмплярам класса, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Ооп. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π’ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ любая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой Π½Π°Π±ΠΎΡ€ инструкций процСссора. ВсС, Ρ‡Ρ‚ΠΎ написано Π½Π° Π»ΡŽΠ±ΠΎΠΌ языкС программирования, — Π±ΠΎΠ»Π΅Π΅ удобная, упрощСнная запись этого Π½Π°Π±ΠΎΡ€Π° инструкций, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰Π°Ρ написаниС, ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ языка, Ρ‚Π΅ΠΌ Π² Π±ΠΎΠ»Π΅Π΅ простой Ρ„ΠΎΡ€ΠΌΠ΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ дСйствия. НапримСр, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько инструкций, ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΠ²ΡˆΠΈΡΡŒ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ…, Π° Π² C ΠΈΠ»ΠΈ ПаскалС для этого достаточно ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Π‘ Ρ€ΠΎΡΡ‚ΠΎΠΌ объСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ становится Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ всС Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΈ ΡΡ‚ановится Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΈ ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ нСсущСствСнноС. Π­Ρ‚ΠΎΡ‚ процСсс называСтся ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ΠΌ стСпСни абстракции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ абстракции являСтся использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ послС написания ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π²Π»Π΅Ρ‡ΡŒΡΡ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ трСбуСтся Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΅ ΠΈΠ½Ρ‚СрфСйс.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг — использованиС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ — это Π½Π°Π±ΠΎΡ€ связанных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ вмСстС с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚. ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° структурируСтся ΠΈ ΠΈΠ½Ρ„ормация группируСтся. ИзвнС модуля информация Π²ΠΈΠ΄Π½Π° Π² Π±ΠΎΠ»Π΅Π΅ СстСствСнном Π²ΠΈΠ΄Π΅. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ всС Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Π΅ свСдСния, относящиСся ΠΊ Ρ„ΠΈΠ³ΡƒΡ€Π΅, Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π½Π° ΡΠΊΡ€Π°Π½Π΅ (ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π·ΠΌΠ΅Ρ€, ориСнтация (ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°), Ρ†Π²Π΅Ρ‚).

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΡ‚ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ, ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚, ΠΏΡ€ΠΎΡ‡Π΅Ρ€Ρ‚ΠΈΡ‚ΡŒ). Они ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ вмСстС с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

ΠŸΡ€ΠΈ этом для использования этих Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ Ρ‚рСбуСтся ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ знания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ написаны — Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ описания интСрфСйсов.

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ абстракции ΠΏΡ€Π΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ†Π΅Π»ΡŒ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ структуру ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Π² Π²ΠΈΠ΄Π΅ мСньшСго количСства Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ большим объСмом ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

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

понятия класса являСтся Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΈΠ΄Π΅ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Ρ, Π³Π΄Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, Π² ΠΊΠ»Π°ΡΡΠ΅ описыватся Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎΡ‚, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΠ΄Π½Π° Ρ„ΠΈΠ³ΡƒΡ€Π°). Π’ΠΎΡ‚, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ класс, сам создаСт ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΏΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… (Ρ„ΠΈΠ³ΡƒΡ€), сколько Π΅ΠΌΡƒ трСбуСтся.

Π’ ΠΊΠ»Π°ΡΡΠ΅ описания структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ. Класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ интСрфСйс — Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ класса нСсущСствСнны. ИдСя классов ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ строСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° — вСдь ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ свойствами (Π΄Π°Π½Π½Ρ‹Π΅) ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ часто ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для модСлирования ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², процСссов ΠΈ ΡΠ²Π»ΡΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, поэтому Π² ΡΠ·Ρ‹ΠΊΠ΅ программирования ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹ΠΉ инструмСнт для прСдставлСния ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

Π”Π°ΠΆΠ΅ Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для модСлирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, всС Ρ€Π°Π²Π½ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ чСловСчСского ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΎΠ²Π°, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ понятиями (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ), Π° Π½Π΅ Π΄Π΅ΠΉΡΡ‚виями (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ООП Π±ΠΎΠ»Π΅Π΅ приспособлСно ΠΊ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Класс являСтся Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, опрСдСляСмым ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’ΠΈΠΏ Π·Π°Π΄Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ этого Ρ‚ΠΈΠΏΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, примСняСмыС ΠΊ ΡΡ‚ΠΈΠΌ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌ. ВсС это ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅. НапримСр, Ρ‚ΠΈΠΏ int опрСдСляСт, Ρ‡Ρ‚ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° этого Ρ‚ΠΈΠΏΠ° (int i) Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 4 Π±Π°ΠΉΡ‚Π°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ значСния ΠΎΡ‚ -231 Π΄ΠΎ 231-1 ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΈ Ρ‚. Π΄. Π‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚) опрСдСляСт, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ этого Ρ‚ΠΈΠΏΠ° (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚) Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для размСщСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π·ΠΌΠ΅Ρ€, ориСнтация (ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°), Ρ†Π²Π΅Ρ‚). Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ экрана, ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° — ΠΎΡ‚ 0 Π΄ΠΎ 90 градусов. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ, ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚, ΠΏΡ€ΠΎΡ‡Π΅Ρ€Ρ‚ΠΈΡ‚ΡŒ.

БущСствСнным свойством класса являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Ρ‚Π°Π»ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ скрыты ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ класса Π·Π° ΠΈΠ½Ρ‚СрфСйсом (вСдь ΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΌ, Π½Π΅ ΠΈΠΌΠ΅Ρ прСдставлСния ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ сгорания ΠΈ ΡƒΡΡ‚ройствС двигатСля).

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) — основная мСтодология программирования 90-Ρ…. Она Π±Π΅Ρ€Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ Π² Simula 67 ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ся Π² (Ρ€Π°Π½Π½ΠΈΡ…) Smalltalk, LISP, Clu ΠΈ (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ…) Actor, Eiffel, Objective C, Java ΠΈ C++.

[Π‘ΡƒΡ‡]: ООП — это мСтодология программирования, основанная Π½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π²ΠΈΠ΄Π΅ совокупности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся экзСмпляром ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса, Π° ΠΊΠ»Π°ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ наслСдования.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ высказывания:

ООП ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… элСмСнтов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° Π½Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹;

ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся экзСмпляром ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса;

классы ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ иСрархичСски.

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ООП ΠœΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ дСйствий ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° НаличиС Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, опрСдСляСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π° благодаря наслСдованию Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π° ΡΡ‚Π°ΠΏΠ΅ выполнСния Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ — маскировка всСх Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Π½Π΅ Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° Π²Π½Π΅ΡˆΠ½Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.).

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ — это процСсс отдСлСния Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° элСмСнтов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… Π΅Π³ΠΎ устройство ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅; инкапсуляция слуТит для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½Ρ‹Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° абстракции ΠΎΡ‚ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Inheritance — наслСдованиС.

Π€Π°Π·Ρ‹ трансляции ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C++ состоит ΠΈΠ·:

ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… исходных Ρ„Π°ΠΉΠ»ΠΎΠ² (с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .cpp);

нуля ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .h).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ этих Ρ„Π°ΠΉΠ»ΠΎΠ² содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Врансляция Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ Ρ‚Ρ€ΠΈ Ρ„Π°Π·Ρ‹ (см. Ρ€ΠΈΡ. 2):

  • Π°) Ρ„Π°Π·Π° прСпроцСссирования. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ исходный Ρ„Π°ΠΉΠ» вмСстС со Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Π² Π½Π΅Π³ΠΎ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #include) тСкстом ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ трансляции. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора;
  • Π±) Ρ„Π°Π·Π° компиляции. КаТдая Π΅Π΄ΠΈΠ½ΠΈΡ†Π° трансляции прСобразуСтся компилятором Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .obj), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для связывания с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.
  • Π²) Ρ„Π°Π·Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.
Врансляция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C++.

Рис. 1. Врансляция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C++

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ исходный (.cpp) Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ„Π°Π·Ρ‹ нСзависимо ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ тСкста Π² ΠΎΠ΄Π½ΠΎΠΌ .cpp-Ρ„Π°ΠΉΠ»Π΅ пСрСкомпиляции Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этот .cpp-Ρ„Π°ΠΉΠ». ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ .h-Ρ„Π°ΠΉΠ»Π° пСрСкомпиляция потрСбуСтся для всСх .cpp-Ρ„Π°ΠΉΠ»ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… Π΅Π³ΠΎ.

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ — тСкстовый процСссор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ тСкстом исходных Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„Π°Π·Π΅ трансляции. ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ позволяСт: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ макросы, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ макроподстановку, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ машинно-зависимыС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ частям исходного ΠΊΠΎΠ΄Π°.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ прСпроцСссору. ВсС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с ΡΠΈΠΌΠ²ΠΎΠ»Π° #.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° макроопрСдСлСния.

#define ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠΉ_тСкст.

#define ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„, …, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„) Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠΉ_тСкст ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹: Π²ΠΎ Π²ΡΠ΅Ρ… мСстах, Π³Π΄Π΅ встрСчаСтся лСксСма ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„, вмСсто Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠΉ_тСкст (ΠΎΡ‚ ΠΌΠ΅ΡΡ‚Π° макроопрСдСлСния ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°). ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

#define IDI_ICON1 101.

#define HIWORD (l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF)).

#define CASE break; case.

#define FOREVER for (;;).

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² C, Π½ΠΎ Π² C++ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΆΠ΅. ВмСсто макроподстановки, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ константу, рСкомСндуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ константу с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова const, Π° Π²ΠΌΠ΅ΡΡ‚ΠΎ макроподстановки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° — inline-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include.

#include «path-spec» .

#include.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ (Π΄ΠΎ 10 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ).

#undef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„.

#pragma Ρ‚ΠΎΠΊΠ΅Π½-стринг #pragma vtordisp (off).

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости (scope).

КаТдоС имя (Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ) Π² C++ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ называСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости ΠΈΠΌΠ΅Π½ΠΈ.

БущСствуСт 5 областСй видимости: локальная ΠΎ.Π²., ΠΎ.Π². Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎ.Π². Ρ„Π°ΠΉΠ»Π°, ΠΎ.Π². класса, ΠΎ.Π². ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Имя, объявлСнноС Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°, доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΡ‚ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΈ Π² ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΠΈΡ…ся Π² Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ°Ρ…, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΡ‡ΠΊΠΈ объявлСния. Π—Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΡƒΡŽ ΠΎ.Π². ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΊΠΈ для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° goto. ΠœΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π»ΡŽΠ±ΠΎΠΌ мСстС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ Π·Π° Π΅Π΅ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„Π°ΠΉΠ»Π°. Π›ΡŽΠ±ΠΎΠ΅ имя, объявлСнноС Π²Π½Π΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ Π±Π»ΠΎΠΊΠ° ΠΈΠ»ΠΈ класса, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎ.Π². Ρ„Π°ΠΉΠ»Π°. Имя доступно послС Ρ‚ΠΎΡ‡ΠΊΠΈ объявлСния Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°. Доступ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€: i.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости класса. ИмСна Ρ‡Π»Π΅Π½ΠΎΠ² класса ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎ.Π². класса. Доступ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (. ->) ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ classname: i.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°. Π­Ρ‚Ρƒ ΠΎ.Π². ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π°, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

БвязываниС (linkage).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ† трансляции, связываСмых вмСстС. Бпособ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΅Π΄. трансляции, называСтся связываниСм. БущСствуСт 3 Ρ‚ΠΈΠΏΠ° связывания: Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ (static int a;), внСшнСС (int a; extern int a;) ΠΈ ΠΎΡ‚сутствиС связывания (typedef, enum).

Π’ΠΈΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ выдСляСмой памяти (способы использования памяти) БтатичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° Π²ΡΠ΅ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΡΡ‚атичСской памяти Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΡ€ΠΎΡΡ‚ранств ΠΈΠΌΠ΅Π½, статичСскиС Ρ‡Π»Π΅Π½Ρ‹ классов ΠΈ ΡΡ‚атичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Π² ΡΡ‚атичСской памяти, конструируСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ ΡΠΎΡ…раняСтся Π΄ΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Он Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ адрСс. Π’ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ (multithreaded) ΠΊΠΎΠ΄Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ состояниС для всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

АвтоматичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ рСкурсивного ΠΊΠΎΠ΄Π° автоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра Π±Π»ΠΎΠΊΠ°. АвтоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° управлСния ΠΈΠ· ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΠΈΡ… Π±Π»ΠΎΠΊΠ°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π°Π²Ρ‚. ΠΏΠ΅Ρ€Π΅ΠΌ. Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΡΡ‚Π΅ΠΊΠ΅.

Бвободная (динамичСская) ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ явно Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ°ΠΌΡΡ‚ΡŒ большС Π½Π΅ Π½ΡƒΠΆΠ½Π° (ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ new ΠΈ delete).

Класс памяти (storage class).

Класс памяти управляСт ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΆΠΈΠ·Π½ΠΈ ΠΈ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…) Π² C++. (auto, register, static ΠΈ extern).

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

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹:

new имя_Ρ‚ΠΈΠΏΠ°.

new имя_Ρ‚ΠΈΠΏΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€

new имя_Ρ‚ΠΈΠΏΠ° [Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅].

3 эффСкта: выдСляСтся Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ объСм памяти для хранСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ (ю)тся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Ρ‹) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

int *p, *q;

p=new int (5);

q=new int[10];

delete Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

delete [] Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Массив — Π½Π°Π±ΠΎΡ€ элСмСнтов ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° — Π½Π°Π±ΠΎΡ€ элСмСнтов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ структуры называСтся Ρ‡Π»Π΅Π½ΠΎΠΌ.

struct human{.

char *name;

int age;

}; //Ρ‚ΠΎΡ‡ΠΊΠ° с Π·Π°ΠΏΡΡ‚ΠΎΠΉ послС '}'.

void f (){.

human vova;

vova.name="Vova" ;

vova.age=70;

human piter={" ΠŸΠ΅Ρ‚Ρ", 100};

human *pp=&vova;

pp->age+=1;

}.

Имя структуры (human) называСтся Ρ‚Π΅Π³ΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ‚ΠΈΠΏΠΎΠΌ. МоТно ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° human (vova, piter). Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ структуры (см. ΠΏΡ€ΠΎΠ³.).

Для доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ структуры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «Ρ‚ΠΎΡ‡ΠΊΠ°» — «.» (vova.name). ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Π²ΠΈΠ΄Π° пСрСмСнная_структуры.имя_Ρ‡Π»Π΅Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ простая пСрСмСнная.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ указатСля структуры. К ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ‚ΠΈΠΏΠ° структуры часто ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ посрСдством ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° «->» :

ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ_Π½Π°_структуру->имя_Ρ‡Π»Π΅Π½Π° Π­Ρ‚ΠΎ эквивалСнтно.

(*ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ_Π½Π°_структуру).имя_Ρ‡Π»Π΅Π½Π° Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° — Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, опрСдСляСмый ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏ стСка.

const int max_len=1000;

struct stack{.

int top;

char s[max_len];

};

void reset (stack *stk){stk->top=0;}.

void push (stack *stk, char c){stk->s[stk->top++]=c;}.

char pop (stack *stk){return stk->s[—stk->top]; }.

bool is_empty (const stack *stk){return stk->top==0;}.

bool is_full (const stack *stk){return stk->top==max_len;}.

void use_stack ().

{.

stack s;

char str[]="Using Stack!!!" ;

int i=0;

cout<

reset (&s);

while (str[i]) push (&s, str[i++]);

while (!is_empty (&s))cout<

cout<

// pop (&s);

}.

НапСчатаСтся строка Π² ΠΏΡ€ΡΠΌΠΎΠΌ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядках.

ΠšΠ›ΠΠ‘Π‘Π« Π’ C++ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° Π²ΠΈΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ²: встроСнныС ΠΈ Ρ‚ΠΈΠΏΡ‹ классов. ВстроСнныС Ρ‚ΠΈΠΏΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² ΡΠ΅Π±Ρ: char, int, double. Π’ΠΈΠΏΡ‹ классов Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² ΡΠ΅Π±Ρ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: string, vector, istream, CFile, CDialog.

Π‘Π²ΠΎΠΈ Ρ‚ΠΈΠΏΡ‹ классов ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚. Если ΠΎΠ½ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ написаны, Ρ‚ΠΎ ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

Класс примСняСтся для опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… концСпциям прилоТСния.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ класса ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ struct Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π° Π² C++ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ структур. ОбъявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ структуры ΠΈ ΡΡ‚Π° функция вызываСтся с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ для Ρ‡Π»Π΅Π½ΠΎΠ² структуры. ИдСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, нСобходимая для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… struct, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ прямо Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ структуры.

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ стСк: (сначала ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… struct).

struct stack2.

{.

enum{ max_len=100};

int top;

char s[max_len];

void reset ();

void push (char c);

char pop ();

bool is_empty ()const;

bool is_full ()const;

};

void stack2: reset () {top=0;}.

void stack2: push (char c){s[top++]=c;}.

char stack2: pop (){return s[—top]; }.

bool stack2: is_empty ()const {return top==0;}.

bool stack2: is_full ()const {return top==max_len;}.

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ Ρ‡Π»Π΅Π½ΠΎΠ² класса (top, s) «ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ», нСпосрСдствСнно.

void use_stack2().

{.

stack2 s;

char str[]="Using Stack!!!" ;

int i=0;

cout<

s.reset ();

while (str[i]).

s.push (str[i++]);

while (!s.is_empty ()).

cout<

cout<

// pop (&s);

}.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° stack2 ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ этого (своСго) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс.

stack2 data, operands;//ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ 2 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° со ΡΠ²ΠΎΠΈΠΌΠΈ.

//top ΠΈ s[].

//Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅, Π° ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅.

data.reset ();//data.top=0;

operands.reset ();//operands.top=0;

stack2 *pstack=&operands;

pstack->push ('A');//operands.s[operands.top++]='A'.

Богласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ C++, Ссли функция-Ρ‡Π»Π΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° (Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ объявлСна) Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… структуры, Ρ‚ΠΎ ΠΎΠ½Π° являСтся встраиваСмой. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ, Π½ΡƒΠΆΠ½ΠΎ вынСсти Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ структуры, Π° ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ (ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ).

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ области видимости «:» .

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ доступом ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ структуры Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΎ Π² Π‘++ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ (private) ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ (public) Ρ‡Π»Π΅Π½Ρ‹. Π­Ρ‚ΠΎ касаСтся ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² структуры.

К ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ структуры имССтся нСпосрСдствСнный доступ ΠΈΠ· Π»ΡŽΠ±ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ структуры.

К Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ доступ Π½Π΅ Π²ΡΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, Ρ‡ΡŒΠΈ полномочия Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΎ доступа ΠΊ ΡΡ‚ΠΈΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ. Π’Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ структур. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π°Π²ΠΎ, Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

struct primer{.

public:

int a; //public member.

double b (int); //public member.

private:

int c; //private member.

double d (int); //private member.

};

double primer: b (int p).

{.

a=7; //ok, can access all members.

b (3); //ok.

c=2; //ok.

return d (1); //ok.

}.

double primer: d (int p).

{.

a=7; //ok, can access all members.

b (3); //ok.

c=2; //ok.

return d (1); //ok.

}.

double use (int p).

{.

primer pr;

pr.a=7; //ok, public member.

pr.b (3); //ok, public member.

// pr. c=2; //error: cannot access private member.

// return pr. d (1);//error: cannot access private member.

return 1;

}.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ primer: c ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ primer: b (), Π½ΠΎ Π½Π΅ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ.

ПолСзно Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄, доступный Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ, Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ — ΠΊΠ°ΠΊ описаниС интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, ΠΈ ΡΡ‚ΠΎ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ использования структуры ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ части структуры Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту структуру (хотя ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ пСрСкомпиляция).

Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ рСкомСндуСтся ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, Π½ΠΎ Π½Π΅ Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΡΡ‚ΠΎΠΌ случаС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ интСрфСйс структуры (класса). Π’ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ части ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ Π΄Π°Π½Π½Ρ‹Π΅. Π’ ΡΡ‚ΠΎΠΌ случаС для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ классом (структурой), Π΅Π³ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ².

Π”Ρ€ΡƒΠ³ΠΎΠ΅ прСимущСство — локализация ошибок. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ². ΠšΠ»Π°ΡΡΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠΎΠΉ структуры, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π°Π²ΠΎ доступа ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, struct ΠΈ class взаимозамСняСмы ΠΏΡ€ΠΈ условии Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ опрСдСлСния ΠΏΡ€Π°Π² доступа.

class a{.

int b;//private.

}.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚ΠΈΠΏΠ° reset () ΠΈΠ»ΠΈ init () для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса нСэлСгантно ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ΠΎ ошибкам. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π΄Π²Π°ΠΆΠ΄Ρ‹. Π›ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ прСдоставлСниС программисту возмоТности ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ явноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — инициализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ такая функция создаСт (конструируСт) значСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΠ½Π° называСтся конструктором. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ распознаСтся ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ — это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π‘Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько способов ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ввСдя нСсколько конструкторов.

class stack3.

{.

public:

stack3(); //конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

stack3(char);//stack that contains 1 element.

void push (char c);

char pop ();

bool is_empty ()const;

bool is_full ()const;

private:

enum{ max_len=100};

int top;

char s[max_len];

};

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ выполняСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

void use_stack3().

{.

stack3 s; //выполняСтся конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

stack3 s1('d');//выполняСтся конструктор с ΠΎΠ΄Π½ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

stack3 *ps=new stack3();//выполняСтся конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡.

stack3 *ps1=new stack3('d');//Π²Ρ‹ΠΏΠΎΠ»Π½. конструктор c 1 Π°Ρ€Π³.

delete ps;

delete ps1;

}.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ конструктора.

stack3:stack3():top (0){}.

stack3:stack3(char c)//stack that contains 1 element.

:top (1).

{.

s[0]=c;

}.

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ конструктора ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΉ для вас синтаксис. ΠœΠ΅ΠΆΠ΄Ρƒ символом «:» ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой ({) находится ряд ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² конструктора (constructor initializers), Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 1 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ конструктора вСлят компилятору ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ значСниями, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках. Π’ Ρ‡Π°ΡΡ‚ности, top устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 0. Π’Ρ‚ΠΎΡ€ΠΎΠΉ конструктор ΠΈΠ½ΠΈΡ†.1 ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ присваиваниС.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Π°ΠΆΠ½ΠΎ ΡƒΡΡΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² конструктора. ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия.

  • 1. C++ - срСда выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • 2. C++ - срСда ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΡΠΎΠΎΡ‚вСтствии со ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ конструктора.
  • 3. C++ - срСда выполняСт Ρ‚Π΅Π»ΠΎ конструктора.

ВпослСдствии Ρ‚Π΅Π»ΠΎ конструктора ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эти Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния, Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ всСгда выполняСтся Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° выполнСния Ρ‚Π΅Π»Π° конструктора. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ явно Π½Π°Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡Π»Π΅Π½ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ‚Π΅Π»Π΅ конструктора. (Ρ‚Π΅ΠΌ самым ΠΌΡ‹ ΠΈΠ·Π±Π΅Π³Π°Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ выполнСния ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ дСйствий) Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ смысл сущСствования конструкторов состоит Π² Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΡƒΡ‚ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ смысл состояниС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с 2 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ конструктора.

class complex{.

complex (double real, double imag);

complex (double real);

};

complex:complex (double real, double imag).

{re=real; im=imag;}.

complex:complex (double real).

{re=real; im=0;}.

ИспользованиС:

complex c3(2,3); //инициализация ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния (Π΄Π°ΠΆΠ΅ void).

Если ΠΌΡ‹ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ конструктора, компилятор синтСзируСт Π΅Π³ΠΎ Π·Π° Π½Π°Ρ. Π‘ΠΈΠ½Ρ‚Π΅Π·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ конструктор Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструкторы ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для всСх Ρ‡Π»Π΅Π½ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Π΅ Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ встроСнный Ρ‚ΠΈΠΏ, Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ся (содСрТат мусор).

ДСструкторы НСкоторым классам трСбуСтся функция, которая Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ вызываСтся ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (для закрытия Ρ„Π°ΠΉΠ»Π°, снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Ρ‚. Π΄.). Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ дСструкторами. Имя дСструктора — это имя конструктора с ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ символом «Ρ‚ΠΈΠ»ΡŒΠ΄Π°»:

~stack3(){delete[] s};

БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹ Π§Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° класса памяти static. Π§Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ static, раздСляСтся всСми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ своСго класса ΠΈ Ρ…ранится Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС. НСстатичСскиС Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра (Ρ‚.Π΅. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) класса. Если Π±Ρ‹ Π½Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ статичСских Ρ‡Π»Π΅Π½ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, свСдСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ всСм экзСмплярам класса, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ Ρ€Π°Π·ΠΎΡ€Π²Π°Π»ΠΎ Π±Ρ‹ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΈΡ… ΠΊΠ»Π°ΡΡΠΎΠΌ. БтатичСский Ρ‡Π»Π΅Π½ позволяСт Π΄Π°Π½Π½Ρ‹ΠΌ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½Ρ‹ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ экзСмпляра, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ видимости класса.

Π’Π°ΠΊ ΠΊΠ°ΠΊ статичСский Ρ‡Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ экзСмпляра, ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π±Π΅Π· указания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

имя_класса: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ области видимости.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

<�сначала how_many_,.

Π·Π°Ρ‚Π΅ΠΌ how_many (),.

Π·Π°Ρ‚Π΅ΠΌ const max_len_>

//stat.h.

class stack_stat.

{.

public:

stack_stat ();

~stack_stat ();

bool is_full ()const;

static int how_many ();

private:

static const int max_len_=100;

int top;

char s[max_len_];

static int how_many_;

};

//stat.cpp.

#include «stat.h» .

#include.

int stack_stat:how_many_=0;

stack_stat:stack_stat ():top (0){++how_many_;}.

stack_stat:~stack_stat (){—how_many_;}.

bool stack_stat:is_full ()const {return top==max_len_;}.

int stack_stat:how_many (){return how_many_;}.

//use.cpp.

#include «stat.h» .

#include.

using namespace std;

void use_stack_stat ().

{.

stack_stat *ps=new stack_stat ();

stack_stat s;

// cout<<<' ';

cout<

// ps->~stack_stat ();

char str[]="Using Stack!!!" ;

int i=0;

cout<

while (str[i]).

ps->push (str[i++]);

//*ps=reverse_order (*ps);

while (!ps->is_empty ()).

cout.

cout<

// s. pop ();

delete ps;

cout<

}.

Π’ ΡΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ how_many отслСТиваСтся, сколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса stack_stat Π±Ρ‹Π»ΠΎ создано.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΠ° static ΠΈ const.

C++ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΠ° static ΠΈ const. БинтаксичСски статичСская функция-Ρ‡Π»Π΅Π½ содСрТит ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ static, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ объявлСния класса. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π½Π΅ класса Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ этот ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€:

БинтаксичСски, функция-Ρ‡Π»Π΅Π½ Ρ‚ΠΈΠΏΠ° const вводится ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ const, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π·Π° ΡΠΏΠΈΡΠΊΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ объявлСния класса. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π½Π΅ класса Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ этот ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€:

ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ функция-Ρ‡Π»Π΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Π°Ρ функция-Ρ‡Π»Π΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ такая функция Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

БтатичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρƒ нСдоступны Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½Ρ‹ статичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ для константного, Ρ‚Π°ΠΊ ΠΈ Π΄Π»Ρ нСконстантного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ константой. НапримСр:

class complex{.

double re, im;

public:

double real ()const{return re;}.

double real_bad_version (){return re;}.

}.

void f (){.

const complex c1(1,0);

complex cx (2,3);

cout<<

cout<

cout<

}.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Для Ρ‚ΠΈΠΏΠ°, опрСдСляСмого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Набор Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ доступа (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-сСлСкторов). Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ const, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹.

Набор Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². ΠŸΡ€ΠΈ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСобходимости Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² Π΄Π΅Ρ‚алях прСдставлСния ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ ΡΠΌΡ‹ΡΠ»Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π° Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρƒ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, связанных с Π½ΠΈΠΌ, Π½ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… опрСдСлСния Π² ΠΊΠ»Π°ΡΡΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ся Π² Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎΠΌ доступС ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ — Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΡƒΡŽ (ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ) Ρ„ΠΎΡ€ΠΌΡƒ записи.

class complex{.

public:

complex (double re=0,double im=0).

:_re (re),_im (im){}.

double real ()const{return _re;}.

double imag ()const{return _im;}.

void add (complex);

private:

double _re,_im;

};

complex plus (complex a, complex b);

void print (complex a);

bool operator==(complex a, complex b);//ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Бпособы использования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅:

ИмСнованного автоматичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, создаваСмого ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° встрСчаСтся Π΅Π³ΠΎ объявлСниС Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½.

void f (complex c){complex c1(2,3);}.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ памяти, создаваСмого ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ delete.

complex *pc=new complex (2,3);

НСстатичСского Ρ‡Π»Π΅Π½Π°-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚оТаСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° создаСтся ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚оТаСтся содСрТащий Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

class X{.

complex _c;

stack _s;

public:

X (complex &).

};

АргумСнты конструкторов-Ρ‡Π»Π΅Π½ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ конструктора ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π³ΠΎ класса.

X:X (complex &c).

:_c©,_s (100)//список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

{}.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Ρ‡Π»Π΅Π½ΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ‚Π΅Π»Π° конструктора самого класса. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Ρ‡Π»Π΅Π½ Π½Π΅ Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ся Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π° массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚оТаСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ‚ся ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚оТаСтся массив, элСмСнтом ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ ΡΠ²Π»ΡΠ΅Ρ‚ся.

complex cmas[10];

ВызываСтся конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ статичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ объявлСниС встрСчаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚оТаСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

{static complex c=sin (3);}.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ статичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· «Π²ΠΎ Π²Ρ€Π΅ΠΌΡ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹» ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΡ€ΠΈ Π΅Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ.

complex c (1,0);

Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ вычислСния выраТСния ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚оТаСтся ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ вычислСния всСго выраТСния.

k=plus (c1,complex (1,2)).imag (); return c1;

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области памяти.

Π§Π»Π΅Π½Π° объСдинСния union, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π°, Π½ΠΈ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π°.

union economy{ rec c; double d};

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

БущСствуСт 2 Π²ΠΈΠ΄Π° копирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

инициализация ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ копирования.

stack s2=s1;

присваиваниС.

s2=s1;

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ копия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° содСрТит копию ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π°. ΠŸΠΎΡ‡Π»Π΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… рСсурсы, управляСмыС ΠΏΠ°Ρ€ΠΎΠΉ конструктор/дСструктор (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для класса стСка с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ памяти Π²ΠΎ Π²Ρ€Π΅ΠΌΡ создания стСка ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ этой памяти Π²ΠΎ Π²Ρ€Π΅ΠΌΡ уничтоТСния стСка).

Если это Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ трСбуСтся для класса, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ подходящСС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, написав для копирования ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ (Ρ‹Π΅) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (ΠΈ). Для случая 1) это Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор, Π° Π΄Π»Ρ случая 2) — ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ присваиваниС.

class stack{.

int cap;

int top;

char *s;//ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ создаСт.

//стСки-сиамскиС Π±Π»ΠΈΠ·Π½Π΅Ρ†Ρ‹.

public:

stack (int capacity=10):cap (capacity), top (0),.

s (new char[capacity]){}.

~stack (){delete[] s;}.

stack (const stack&);

stack& operator=(const stack&);//returns value for s1=s2=s3;

};

ИспользованиС:

stack a (100), c;a.push (`a');

stack b=a;с=a;

Для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ копирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

#include //for memcpy.

stack:stack (const stack& st).

:cap (st.cap), top (st.top), s (new char[st.cap]){.

//for (int i=0;i.

memcpy (s, st. s, cap);

}.

stack& stack: operator=(const stack&st){.

if (this≠&st){.

delete[] s;

s=new char[cap=st.cap];

//for (int i=0;i.

memcpy (s, st. s, cap);

top=st.top;

}.

return *this;

}.

ΠšΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ присваиваниС ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ «Ρ‡ΠΈΡΡ‚ΡƒΡŽ» ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ присваиваниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡƒΠΆΠ΅ созданным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ (Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ самому сСбС, инициализация ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов).

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° double ΠΈ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Ρ‚ΠΈΠΏΠ° double, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

x+y*z.

Для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… cx, cy, cz ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ Ρ€Π°Π½Π΅Π΅ Ρ‚ΠΈΠΏΠ° complex Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ дСйствия ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Ρ‚Π°ΠΊ:

complex cx, cy, cz;

cy.mul (cz);

cx.add (cy);

Если ΠΆΠ΅ ΠΌΡ‹ Π·Π°ΠΏΠΈΡˆΠ΅ΠΌ.

cx+cy*cz.

Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‚.ΠΊ. встроСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «+» ΠΈ «*» ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ.

Однако C++ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ смысл ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π² Ρ‚ΠΎΠΌ числС слоТСния ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ) для опрСдСляСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

class complex{.

public:

complex operator+(complex);

complex operator*(complex);

private:

double re, im;

};

complex complex: operator +(complex a).

{.

return complex (re+a.re, im+a.im);

}.

complex complex: operator *(complex a).

{.

return complex (re*a.re-im*a.im, re*a.im+im*a.re);

}.

Если cy ΠΈ cz ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ complex, Ρ‚ΠΎ cy+cz ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ cy. operator+(cz).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ дСйствия Π½Π°Π΄ комплСксными числами Π² Ρ„ΠΎΡ€ΠΌΠ΅, Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ½ΡΡ‚ΠΎΠΉ:

complex c1(r1,i1), c2(r2,i2);

c2=с2+c1*complex (2,3);

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ дСйствия Π½ΡƒΠΆΠ½ΠΎ произвСсти ΠΈ Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ.

Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, поэтому Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сначала выполняСтся ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π°Ρ‚Π΅ΠΌ слоТСниС.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. МоТно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ смысл ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

+ - * / % = += -= *= ++ —, -> [] () new delete.

ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… (всСго 42).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ:

: (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ области видимости).

. (Π²Ρ‹Π±ΠΎΡ€ Ρ‡Π»Π΅Π½Π° класса ΠΈΠ»ΠΈ структуры).

.* (Π²Ρ‹Π±ΠΎΡ€ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‡Π»Π΅Π½ класса).

?: (Ρ‚Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€) ДопускаСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½ΠΎ Π½Π΅Π»ΡŒΠ·Ρ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ** для стСпСни).

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΈ ΡƒΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ — Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ выраТСния. АргумСнтами ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ (Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°):

НапримСр: a+b, a*=b, a.

ΠΈ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ (ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄) НапримСр: -a, —a, &a, a++

Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, дСлятся Π½Π° ΠΏΡ€Π΅Ρ„иксныС (-a, ++a) ΠΈ ΠΏΠΎΡΡ‚фиксныС (a++).

Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ Ρ‚Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, a? b:c, Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ дСйствиС нСльзя.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ своих ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² вычисляСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

a*b+c>d (((a*b)+c)>d)

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, опрСдСляСтся ΠΈΡ… ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. НапримСр, ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° * Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° +.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ (ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ) свои ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹

++a, a++, a*=b, a=b

Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ — Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚

a+b, a-b, -a.

ΠŸΡ€Π°Π²ΠΈΠ»Π° опСрСдСлСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Для любого Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° @ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ aa@bb интСрпрСтируСтся Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π°) нСстатичСская функция-Ρ‡Π»Π΅Π½ с ΠΎΠ΄Π½ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ

aa.operator@(bb)

Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π±) функция-Π½Π΅-Ρ‡Π»Π΅Π½ с Π΄Π²ΡƒΠΌΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

operator@(aa, bb)

Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΄Π»Ρ выяснСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, примСняСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ (см. ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ). НапримСр:

class X{

public:

void operator+(int);

X (int);

};

void operator+(X, X);

void operator+(X, double);

void f (X a)

{

a+1; //a.operator+(1)

1+a; //:operator+(X (1), a)

a+1.0;//:operator+(a, 1.0)

}

Π£Π½Π°Ρ€Π½Ρ‹Π΅ прСфиксныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Для любого прСфиксного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° @ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ @aa интСрпрСтируСтся Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π°) нСстатичСская функция-Ρ‡Π»Π΅Π½ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

aa.operator@()

Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π±) функция-Π½Π΅-Ρ‡Π»Π΅Π½ с ΠΎΠ΄Π½ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ

operator@(aa)

Π£Π½Π°Ρ€Π½Ρ‹Π΅ постфиксныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Для любого постфиксного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° @ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ aa@ интСрпрСтируСтся Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π°) нСстатичСская функция-Ρ‡Π»Π΅Π½ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° int

aa.operator@(int)

Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Π±) функция-Π½Π΅-Ρ‡Π»Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°:

operator@(aa, int).

Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΄Π»Ρ опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΈΠΊΠ°ΠΊΡƒΡŽ) ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, примСняСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

class X{//Ρ‡Π»Π΅Π½Ρ‹

X* operator&();//прСфиксный ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ & (Ρ‡Π΅ΠΉ-Ρ‚ΠΎ адрСс)

X operator&(X); //Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ & (И)

X operator++(int); //постфиксный ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚

X operator&(X, X); //ошибка: 3 ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°

X operator/(); //ошибка: ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ /

};

//Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Π½Π΅-Ρ‡Π»Π΅Π½Ρ‹

X operator-(X); //прСфиксный ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ;

X operator-(X, X); //Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ;

X operator—(X&, int); //постфиксный Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚

X operator-(); //ошибка: отсутствуСт ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

X operator-(X, X, X); //ошибка: Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°

X operator%(X); //ошибка: ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ %

Π’ΠΈΠΏ комплСксных чисСл Рассмотрим использованиС ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создания класса комплСксных чисСл.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-комплСксного числа ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ способами:

complex c1,//1

c2(1),

c3=2,

c4(3,4),

c5=complex (5,6);

Для этого ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½Π°Π±ΠΎΡ€ конструкторов:

class complex{

public:

complex ():re (0), im (0){}//1.0

complex (double real):re (real), im (0){}

complex (double real, double imag):re (real), im (imag){}

private:

double re, im;

}

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ complex). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² всСго ΠΎΠ΄ΠΈΠ½ конструктор:

complex (double real=0,double imag=0):re (real), im (imag){}//1

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ значСния ΠΊ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠΌΡƒ числу выглядСло Π² ΡΡ‚ΠΈΠ»Π΅ C++:

c1+=c4;//2

c2+=7;

Для этого ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ +=. Π£ Π½Π°Ρ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Π½Π΅-Ρ‡Π»Π΅Π½ класса. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ доступ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ класса (re, im), Ρ‚ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌ Π² ΠΊΠ»Π°ΡΡΠ΅:

complex& operator+=(const complex& a);//2

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° const complex& a. Π’ ΡΡ‚ΠΎΠΌ случаС Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ a ΡΠ²Π»ΡΠ΅Ρ‚ся ссылкой Π½Π° Ρ„актичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. ΠŸΡ€ΠΈ этом Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся адрСс фактичСского ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° (4 Π±Π°ΠΉΡ‚Π°). ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ объявлСниС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

complex& operator+=(complex a);

Π’ ΡΡ‚ΠΎΠΌ случаС фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ a ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 16 Π±Π°ΠΉΡ‚). По ΡΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΠΌ эффСктивности Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ для сокращСния ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΡΡΡ‹Π»ΠΊΡƒ, Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ? Π’ΠΎ Π΅ΡΡ‚ΡŒ:

complex& operator+=(const complex *a);

Но Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ данная ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-функция вызовСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠ»ΡƒΡ‡Π°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ — адрСс, Ρ‚. Π΅.:

c1+=&c4;

Но Ρ‚Π°ΠΊΠΎΠΉ синтаксис — это Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° примСняСм всС-Ρ‚Π°ΠΊΠΈ ссылку.

Для добавлСния Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа объявляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ класса

complex& operator+=(double a);//2

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² .cpp — Ρ„Π°ΠΉΠ»Π΅.

complex& complex: operator+=(const complex& a)//2

{

re+=a.re;//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

im+=a.im;//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΈΠΌΠΎΠΉ части

return *this;//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ значСния

}

Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСтся Π΄Π²Π° дСйствия: 1) выполняСтся опСрация добавлСния ΠΈ 2) выполняСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ значСния. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ значСния Π½ΡƒΠΆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° += ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. НапримСр:

с1=(с2+=с3)+7;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° += Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ — c2) послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊ Π½Π΅ΠΌΡƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ c3). Когда вызываСтся функция complex: operator+=, Π»Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ для Π½Π΅Π΅ доступСн ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½Π° Π²Ρ‹Π·Π²Π°Π½Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, эта функция Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ€Π°Π·ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ this.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ссылку, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚? ΠŸΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΈΠΏΠ° int ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a, Π° Π½Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a:

(a+=b)++;// послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊ a Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ b, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ a Π½Π° 1.

Π­Ρ‚ΠΎ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ справСдливо ΠΈ Π΄Π»Ρ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° complex, Π° Π΄Π»Ρ этого Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ссылку Π½Π° Π»Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄.

РСализация Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° += нСсколько ΠΏΡ€ΠΎΡ‰Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части комплСксного числа:

complex complex: operator+=(double a){

re+=a;

return *this;

}

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сдСлаСм Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ слоТСниС комплСксных чисСл с Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

c1=3+c5;//3

c1=c5+3;

c1=c4+c5;

Для этого ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ +. ΠžΠΏΡΡ‚ΡŒ Ρƒ Π½Π°Ρ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½ класса ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π½Π΅-Ρ‡Π»Π΅Π½-класса. Π’ ΠΏΠΎΠ»ΡŒΠ·Ρƒ послСднСго Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π΄ΠΎΠ²ΠΎΠ΄Π°. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-Ρ‡Π»Π΅Π½-класса Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ для случая 3+c5, Ρ‚.ΠΊ. Π»Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, для выполнСния слоТСния Π½Π΅ Ρ‚рСбуСтся ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ класса complex. Π˜Ρ‚Π°ΠΊ, опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Π½Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса:

complex operator+(const complex& a, const complex& b);//3.1

complex operator+(const complex& a, double b);//3.2

complex operator+(double a, const complex& b);

Π­Ρ‚ΠΈ Ρ‚Ρ€ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ всС ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ нас ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ += для добавлСния ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

complex operator+(const complex& a, const complex& b){

complex r=a;

return r+=b;

}

complex operator+(const complex& a, double b){

complex r=a;

return r+=b;

}

complex operator+(double a, const complex& b){

complex r=b;

return r+=a;

}

И ΠΎΠΏΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ с +=, слоТСниС complex с double ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ слоТСниС Π΄Π²ΡƒΡ… complex. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ комплСксныС числа Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ Ρ double Π² Π²ΠΈΠ΄Π΅, принятом для встроСнных Ρ‚ΠΈΠΏΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

c2==c4;//4

c2==8;

3==c2;

Для этого ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ==. Как ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ +, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ == ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½, Ρ‚.ΠΊ. ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° для случая 3==с2. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ функция-Π½Π΅-Ρ‡Π»Π΅Π½. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… комплСксных чисСл:

bool operator==(const complex& a, const complex& b);//4.2

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ const ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ функция Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π­Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ трСбуСтся доступ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ класса (re, im), ΠΎΠ΄Π½Π°ΠΊΠΎ прСдставлСниС класса ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ private: ΠΈ ΠΊ Π½Π΅ΠΌΡƒ нСльзя ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈΠ· ΡΡ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ доступа для извлСчСния Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΌΠ½ΠΈΠΌΠΎΠΉ частСй:

public:

double real ()const{return re;}

double imag ()const{return im;}

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹, Π½ΠΎ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса. Π­Ρ‚ΠΈΠΌ самым ΠΌΡ‹ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΈΡ… Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² ΠΌΠ΅ΡΡ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎ ΡΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΠΌ эффСктивности (Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт Π΄Π°Π΅Ρ‚ использованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова inline). Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния:

bool operator==(const complex& a, const complex& b){

return a. real ()==b.real ()&&a.imag ()==b.imag ();

}

Для выполнСния сравнСния complex с double ΠΈ double с complex ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ==:

bool operator==(const complex& a, const double& b){

return a. real ()==b && a. imag ()==0;

}

bool operator==(const double& a, const complex& b){

return a==b.real () && 0==b.imag ();

}

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΡΡ‚ΠΈΡ… функциях Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ Π΄Π΅ΠΉΡΡ‚вия, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°==, Π½ΠΎ Π²ΠΌΠ΅ΡΡ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сам Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° double, Π° Π²ΠΌΠ΅ΡΡ‚ΠΎ ΠΌΠ½ΠΈΠΌΠΎΠΉ части — 0. Π’ΠΎ Π΅ΡΡ‚ΡŒ сравнСниС производится с ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹ΠΌ числом, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вмСсто Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части — Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° double, Π° ΠΌΠ½ΠΈΠΌΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° 0. Если Π±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠ· Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ комплСксноС ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ способом, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄Π²ΡƒΡ… послСдних ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² == Π²ΠΎΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ==. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСобразования Ρƒ Π½Π°Ρ ΡƒΠΆΠ΅ имССтся — это конструктор complex, Π² ΡΠ»ΡƒΡ‡Π°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ся с ΠΎΠ΄Π½ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° double. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Π²Π΅ послСдниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ operator== ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. А Π΄Π»Ρ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π° Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ==, Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сам Π² Π½ΡƒΠΆΠ½Ρ‹Ρ… мСстах Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ конструктор, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ· double ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ complex. НапримСр:

c2==c4;//operator==(c2,c4)

c2==8;//operator==(c2,complex (8))

3==c2;//operator==(complex (3), c2)

Π’Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ комплСксныС числа принятым Π² C++ способом:

std:cout<

Для этого ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄Π° для комплСксного числа:

std:ostream& operator<<(std:ostream& os, const complex& a)

{

return os<<'('<<<','<<<')';

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запись std: cout<

operator<<(operator<<(operator<<(std:cout, c1), c2), c3);

Класс Matrix. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ класса Matrix. Π­Ρ‚ΠΎΡ‚ класс прСдоставляСт динамичСски Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

class Matrix{

public:

Matrix (size_t, size_t);

Matrix (const Matrix&);

~Matrix ();

private:

size_t d1, d2;

int* m;

};

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса содСрТит количСство элСмСнтов d1 ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ d2 ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ размСрности массива. Π’ΠΈΠΏ size_t — это Ρ‚ΠΈΠΏ значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ sizeof. Π’ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния всСх элСмСнтов Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива, Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти являСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ для указатСля m.

Matrix:Matrix (size_t dim1, size_t dim2)

:d1(dim1), d2(dim2), m (new int[size ()]){}

Для хранСния элСмСнтов Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ памяти. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Достоинства Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ: простота удалСния-освобоТдСния памяти. НСдостатки: для доступа ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ (см. Π½ΠΈΠΆΠ΅).

ДСструктор выполняСт delete[] для освобоТдСния памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new[] Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅.

Matrix:~Matrix (){delete[] m;}

Π’ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция-Ρ‡Π»Π΅Π½ size (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ количСство элСмСнтов массива. Π’Π°ΠΊ ΠΊΠ°ΠΊ эта функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π΅Π΅ Π² Ρ€Π°Π·Π΄Π΅Π» private:

private:

size_t size () const {return d1*d2;}

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2×3 выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Matrix m (2,3);

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² Ρ†ΠΈΠΊΠ»Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

for (size_t i=0;i

for (size_t j=0;j

m (i, j)=rand ();

Π—Π΄Π΅ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-сСлСкторы dim1() ΠΈ dim2() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ размСрностям. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… класса:

size_t dim1() const {return d1;}

size_t dim2() const {return d2;}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ записано ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ — m (i, j). К ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° справа приписаны скобки, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ m Ρ Π΄Π²ΡƒΠΌΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ (i, j). ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это Ρ‚ΠΎΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ C++. Π§Ρ‚ΠΎΠ±Ρ‹ запись m (i, j) Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ =, [] ΠΈ -> ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ нСстатичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ класса. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π»Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ():

int& Matrix: operator ()(size_t dd1, size_t dd2){//1

assert (dd1

assert (dd2

return m[dd1*dim2()+dd2];

}

int Matrix: operator ()(size_t dd1, size_t dd2) const{//2

assert (dd1

assert (dd2

return m[dd1*dim2()+dd2];

}

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

Π’Π΅Π»Π° ΠΎΠ±Π΅ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ operator () ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹: выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, послС Ρ‡Π΅Π³ΠΎ вычисляСтся позиция элСмСнта Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС m. Π—Π°Ρ‚Π΅ΠΌ пСрвая функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ элСмСнт, Π° Π²Ρ‚орая — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта. ИмСнно Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ссылки, Π° Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива, записывая m (i, j)=rand ().

Π’Π΅ΠΏΠ΅Ρ€ΡŒ напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ print, ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰ΡƒΡŽ содСрТимоС любой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ Π΅ΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

void print (const Matrix& m){

for (size_t i=0;i

for (size_t j=0;j

std:cout<<<',';

}

std:cout<

}

}

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print являСтся ссылкой Π½Π° ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ функция print Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, компилятор Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° () с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ const. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ значСния обходится дСшСвлС, Ρ‡Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ссылки, Ρ‚.ΠΊ. ссылку трСбуСтся Ρ€Π°Π·ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — Π½Π΅Ρ‚, Π° ΠΎΠ±ΡŠΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ памяти ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² (4 Π±Π°ΠΉΡ‚Π°).

int* Matrix: operator[](size_t dd1) const{

assert (dd1

return &m[dd1*dim2()];

}

Π’Ρ‹Π·ΠΎΠ²: m[3][4]

(m.operator[](3))[4]

Matrix& Matrix: operator=(const Matrix& t){

if (this≠&t){

delete[] m;

m=new int[(d1=t.dim1())*(d2=t.dim2())];

copy (t);

}

return *this;

}

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ся Ρ‡Π°ΡΡ‚ΡŒΡŽ языка. Π­Ρ‚ΠΎ концСпция, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ способ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊΠΎ Π²ΡΠ΅ΠΌ элСмСнтам составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°Ρ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π°ΠΏΠΎΠ»Π½ΡΠ»ΠΈ массив matrix Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ занятии:

for (size_t i=0;i

for (size_t j=0;j

m (i, j)=rand ();

Для этого ΠΌΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°. ΠŸΡ€ΠΈ этом Π½Π°ΠΌ понадобилось ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ индСксныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСмСнная, наращиваСмая Π΄ΠΎ dim1() (это i), Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ индСксом Π² m (i, j), Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, наращиваСмая Π΄ΠΎ dim2() (здСсь это j), Π±Ρ‹Π»Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ индСксом.

Однако ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° — ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ИмСя Π² ΡΠ²ΠΎΠ΅ΠΌ распоряТСнии ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ:

  • Π°) ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ элСмСнту,
  • Π±) ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту.

ИзмСним класс Matrix, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

typedef int* iterator;

iterator begin ()const{return m;}

iterator end ()const{return m+size ();}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ begin () ΠΈ end () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ «Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ» ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ для ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ массива ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

for (Matrix:iterator p=m.begin ();p≠m.end ();++p)

*p=rand ();

Π—Π΄Π΅ΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° p ΠΌΡ‹

  • Π°) ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ элСмСнту ΠΏΡƒΡ‚Π΅ΠΌ разимСнования указатСля,
  • Π±) ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту, производя ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ указатСля.

БлСдуя ΠΈΠ΄ΠΈΠΎΠΌΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°, напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ:

void print_iter (const Matrix& m){

for (Matrix:iterator p=m.begin ();p≠m.end ();++p)

std:cout<<*p<<',';

}

БлСдуя эффСктивной, ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ схСмС, программист ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ошибка, связанная с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ сдСлаСм ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. По ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту (элСмСнту с ΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ адрСсом) Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ++p ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ Π² ΡΡ‚ΠΎΡ€ΠΎΠ½Ρƒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ придСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ класс ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

Π’Π°ΠΊ ΠΊΠ°ΠΊ этот класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с ΠΊΠ»Π°ΡΡΠΎΠΌ Matrix, Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ этот класс Π²Π½ΡƒΡ‚Ρ€ΠΈ класса Matrix

class Matrix{

class reverse_iterator{

public:

reverse_iterator (int *p):_p (p){}

int& operator*(){return *_p;}

void operator++(){—_p;}

bool operator≠(reverse_iterator r) const{return _p≠r._p;}

private:

int *_p;

};

};

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ класса Matrix, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ значСния для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

reverse_iterator rbegin ()const{return m+size ()-1;}

reverse_iterator rend ()const{return m-1;}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС выглядит Ρ‚Π°ΠΊ:

for (Matrix:reverse_iterator r=m.rbegin ();r≠m.rend ();++r)

*r=rand ();

НСдостатки ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎ Π΄Π²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (begin, end) для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Другая ΠΈΠ΄ΠΈΠΎΠΌΠ° для ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ этих нСдостатков:

class m_iter{

public:

m_iter (Matrix& m):_begin (m.m),_end (m.m+m.size ()){}

void First (){_p=_begin;}

bool NotDone ()const{return _p≠_end;}

int& CurrentItem ()const{return *_p;}

void Next (){++_p;}

private:

int *_begin, *_end, *_p;

};

ИспользованиС:

m_iter mi (m);

for (mi.First ();mi.NotDone ();mi.Next ())

mi.CurrentItem ()=rand ();

Однако класс Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, поэтому Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:

class Matrix{

friend class m_iter;

};

ДруТСствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово friend (Π΄Ρ€ΡƒΠ³) слуТит спСцификатором, ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽΡ‰ΠΈΠΌ свойства Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Оно Π΄Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Π½Π΅-Ρ‡Π»Π΅Π½Ρƒ доступ ΠΊ ΡΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ класса ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚авляСт способ для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ сокрытия Π΄Π°Π½Π½Ρ‹Ρ… Π² C++. Однако Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ вСская ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° для ΠΎΠ±Ρ…ΠΎΠ΄Π° этих ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π²Π°ΠΆΠ½Ρ‹ для Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ программирования.

Одна ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ доступС Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ классу. НапримСр, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Matrix Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ Vector. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Matrix ΠΈ Vector скрыто (private:)

class Matrix;

class Vector{

float v[4];

//…

friend Vector operator*(const Matrix&, const Vector&);

};

class Matrix{

Vector v[4];

//…

friend Vector operator*(const Matrix&, const Vector&);

};

Vector operator*(const Matrix& m, const Vector& v)

{

Vector r;

for (int i=0;i<4;i++){

r.v[i]=0;

for (int j=0;j<4;j++)r.v[i]+=m.v[i]. v[j]*v.v[j];

}

return r;

}

НаслСдованиС НаслСдованиС — это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ получСния Π½ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ для создания ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

МногиС ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΈ Ρ‡Π°ΡΡ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс наслСдуСт описаниС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса; Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π°Π² доступа. Π­Ρ‚Π° концСпция ΠΏΠΎΠ»Π΅Π·Π½Π° Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π΅Π·Π½Π° таксономичСская классификация: ΠΈ ΡΠ»ΠΎΠ½ ΠΈ ΠΌΡ‹ΡˆΡŒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ»Π΅ΠΊΠΎΠΏΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ»Π΅ΠΊΠΎΠΏΠΈΡ‚Π°ΡŽΡ‰ΠΈΠ΅ — Ρ‚Π΅ΠΏΠ»ΠΎΠΊΡ€ΠΎΠ²Π½Ρ‹Π΅ Π²Ρ‹ΡΡˆΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΎΡ‡Π½Ρ‹Π΅, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π° лишь ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ — Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ понятии. Π’ ΠΏΠΎΠ½ΡΡ‚иях «ΡΠ»ΠΎΠ½» ΠΈ «ΠΌΡ‹ΡˆΡŒ» Π΄Π°ΡŽΡ‚ΡΡ лишь Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ особСнности этих ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ….

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс Класс ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹:

class имя_класса: (public|protected|private)opt имя_базового_класса

{

объявлСния Ρ‡Π»Π΅Π½ΠΎΠ²

};

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class ΠΊΠ°ΠΊ всСгда ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ словом struct, Ссли подразумСваСтся, Ρ‡Ρ‚ΠΎ всС Ρ‡Π»Π΅Π½Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова public, protected ΠΈ private ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания Ρ‚ΠΎΠ³ΠΎ, насколько Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π±ΡƒΠ΄ΡƒΡ‚ доступны для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово protected — промСТуточная Ρ„ΠΎΡ€ΠΌΠ° доступа ΠΌΠ΅ΠΆΠ΄Ρƒ public ΠΈ private.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

//inheritance.h

class employee

{

public:

employee (char *name, double salary);

void print ()const;

private:

char nm[30];

double slry;

};

enum language {ASSEMBLER, BASIC, PASCAL, C, CPP, SMALLTALK};

class programmer1

{

public:

programmer1(char *name, double salary, language lang);

void print ()const;

private:

char nm[30];

double slry;

language lng;

};

class programmer2: public employee

{

public:

programmer2(char *name, double salary, language lang);

void print ()const;

private:

language lng;

};

//inheritance.cpp

#include «inheritance.h»

employee:employee (char *name, double salary)

:slry (salary)

{

strcpy (nm, name);

}

void employee: print ()const

{

cout<<" Name: «<<», Salary: «<<» $" ;

}

programmer1:programmer1(char *name, double salary, language lang)

:slry (salary), lng (lang)

{

strcpy (nm, name);

}

void programmer1: print ()const

{

cout<<" Name: «<<», Salary: «<<» $, Language:" ;

switch (lng){

case C: cout<<" C" ;break;

case CPP: cout<<" C++" ;break;

default:cout<<" Another language" ;break;

}

}

programmer2:programmer2(char *name, double salary, language lang)

:employee (name, salary), lng (lang)

{}

void programmer2: print ()const

{

employee:print ();//ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ΅

// Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ

// print () Π±Ρ‹Π»Π° Π·Π°ΠΌΠ΅Ρ‰Π΅Π½Π° Π² programmer2

// ошибка:

// cout<<" Name: «<<», Salary: «<<» $, Language:" ;

// нСльзя ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса

cout<<", Language:" ;//ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, относящСйся

switch (lng){ // Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρƒ

case C: cout<<" C" ;break;

case CPP: cout<<" C++" ;break;

default:cout<<" Another language" ;break;

}

}

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс programmer2 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 1 Ρ‡Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ… lng ΠΈ пСрСопрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ print(). Π­Ρ‚Π° функция замСщаСтся, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ², ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° смысл ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ для Ρ€Π°Π·Π½Ρ‹Ρ… сигнатур.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс programmer2 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 1 Ρ‡Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ… lng ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ print (). Π­Ρ‚Π° функция замСщаСтся, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ², ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° смысл ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ для Ρ€Π°Π·Π½Ρ‹Ρ… сигнатур.

К Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ нСльзя. Π’Π°ΠΌ, Π³Π΄Π΅ это ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ (protected) Ρ‡Π»Π΅Π½Π°ΠΌΠΈ вмСсто Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ…. Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ‡Π»Π΅Π½Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈ ΠΊΠ°ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ функциям.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса вызываСтся ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС. Π­Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ СстСствСнно ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ — для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½ΡƒΠΆΠ½ΠΎ сначала ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρƒ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ, которая относится ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ классу.

employee e1(«John», 80), e2(«Ben», 90);

v.print ();p.print ();

programmer1 p1(«Ron», 200, BASIC);

p1.print ();

programmer2 p2(«Michael», 500, C);

p2.print ();

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, использованиС классов programmer1 (Π±Π΅Π· наслСдования) ΠΈ programmer2 (с Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ) здСсь Π½Π΅ ΠΎΡ‚личаСтся. Однако наслСдованиС ΠΈΠΌΠ΅Π΅Ρ‚ прСимущСство. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса programmer2 ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ employee Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ employee. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ programmer2 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ допустим employee. НапримСр:

print_in_report (const employee& e){ e. print (); }

print_in_report (e1);

//print_in_report (p1); //error

print_in_report (p2); //OK

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΡ€Π΅Π·ΠΊΠ°

employee arr_emp[3]={e1,p2,e2};

mas[0]=v;

// mas[0]=p1;//error

for (int i=0;i<3;++i)mas[i]. print ();

programmer2 p;

employee r=p;//срСзка ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ employee-Ρ‡Π°ΡΡ‚ΡŒ programmer2. Π­Ρ‚ΠΎΡ‚ эффСкт Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ срСзкой. Часто ΠΎΠ½ ΡΠ²Π»ΡΠ΅Ρ‚ся Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Одной ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ использования ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΡΡΡ‹Π»ΠΎΠΊ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ являСтся ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ срСзки. НапримСр:

employee *rptr=&r;//адрСс Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ°

rptr=&p;//адрСс программиста. Π‘Ρ€Π΅Π·ΠΊΠ° отсутствуСт ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы (Derived* ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Base*)

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ (Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ„-Ρ‡Π»Π΅Π½Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ».)

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ (инициализация Ρ‡Π»Π΅Π½ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Ρ‡Π΅Ρ€Π΅Π· конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса)

UML

UML Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Unified Modeling Language — ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык модСлирования. Он ΡΠ²Π»ΡΠ΅Ρ‚ся Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ языком ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Под модСлями ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ понимаСтся графичСскоС прСдставлСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Π²ΠΈΠ΄Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΡ… связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

Π’ΠΈΠ΄Ρ‹ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ:

  • 1. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ΠΎΠ²
  • 2. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  • 3. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ взаимодСйствий (ΠΏΠΎΠ΄Π²ΠΈΠ΄ — Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ)
  • 4. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ классов
  • 5. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ состояний
  • 6. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ развСртывания

БущСствуСт нСсколько Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΈ ΡΠΈΡΡ‚Π΅ΠΌ графичСского обозначСния, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ UML. Однако язык UML сСйчас являСтся стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ.

Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ язык UML

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго UML — язык общСния с ΡΠ°ΠΌΠΈΠΌ собой, Ρ‡Π»Π΅Π½Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ.

Если Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ людям структуру классов, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π±Π΅Π· использования языка, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ UML, Ρ‚ΠΎ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ получится ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ ΠΈ Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ. Π―Π·Ρ‹ΠΊ UML ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ написания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², созданных с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ Π² ΠΏΠΈΡΡŒΠΌΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅).

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов ΠžΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ классы ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

Класс обозначаСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ, содСрТащим Π΄ΠΎ Ρ‚Ρ€Π΅Ρ… элСмСнтов:

  • Β· Имя класса
  • Β· ИмСна ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ) класса
  • Β· ИмСна Π΄Π°Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ² класса

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Π·Π½Π°ΠΊΠ°ΠΌΠΈ + public, # protected, — private.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ классами.

  • Β· ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ «is-a» — Π² ΡΡ‚ΠΎΠΌ случаС ΠΎΠ΄ΠΈΠ½ класс являСтся ΠΏΠΎΠ΄Π²ΠΈΠ΄ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса
  • Β· ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ «has-a» — ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса «ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ элСмСнта Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (ΠΈΠ»ΠΈ ΠΊΡ€Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ) элСмСнтов ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ количСство Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ классов Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс (employee) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов (teacher, manager, …):

class teacher: public employee{…};

class manager: public employee{…};

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс (teacher), Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, сам ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом (для english_teacher):

class english_teacher: public teacher{…};

Π’Π°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ связанных классов называСтся ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠ΅ΠΉ классов. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ Π΄Π΅Ρ€Π΅Π²Π° (Ссли Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСствСнноС наслСдованиС).

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° использования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов:

Код ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. Π’ΠΈΠΏ programmer2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· employee;

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ, свойствСнныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ области;

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ клиСнтскому ΠΊΠΎΠ΄Ρƒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ programmer2 Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ° employee, Ρ‡Ρ‚ΠΎ упростит клиСнтский ΠΊΠΎΠ΄.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс. Π£ Π½Π°Ρ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ programmer2:

employee r («Vasya», 80),*pr;

pr=&r;

pr->print ();//employee:print

programmer2 p («Alex», 300, CPP), *pp;

pr=pp=&p;//ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

pp->print ();//programmer2:print

pr->print ();//employee:print

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ p Ρ‚ΠΈΠΏΠ° programmer2, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π² Ρ€Π°ΡΡ‡Π΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ся.

Поля Ρ‚ΠΈΠΏΠ° Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ подходящиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (programmer2:print ΠΈΠ»ΠΈ employee: print), ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ?

Для этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ввСсти Π² Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΏΠΎΠ»Π΅ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ заинтСрСсованныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³Π»ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ:

class employee{

public:

enum Rab_type{R, P};

Rab_type type;

employee ():type®{}

void print ()const;

};

class programmer: public employee{

public:

programmer (){type=P;}

void print ()const;

};

void employee: print ()const{

cout<<" employee: print" <

}

void programmer: print ()const{

cout<<" programmer: print" <

}

void print (employee* pr){

switch (pr->type){

case employee: R:

pr->print ();

break;

case employee: P:

const programmer* p=static_cast (pr);

p->print ();

break;

}

}

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ employee класса ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ внСсСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΎ Π²ΡΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ систСмы:

Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС employee Π² ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ добавляСтся новая константа;

ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ programmer);

Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ: print добавляСтся новая Π²Π΅Ρ‚Π²ΡŒ.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΏΠΎΠ»Π΅ΠΌ Ρ‚ΠΈΠΏΠ°. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово virtual слСва ΠΎΡ‚ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅. НапримСр:

class employee_v{

public:

virtual void print ()const;

};

ΠŸΡ€ΠΈ этом ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ синтаксичСски Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π½Π΅Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π°:

void employee_v:print ()const{

cout<<" employee_v:print" <

}

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция замСщаСтся Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС:

class programmer_v:public employee_v{

public:

virtual void print ()const;

};

void programmer_v:print ()const{

cout<<" programmer_v:print" <

}

Π’Ρ‹Π·ΠΎΠ² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ синтаксичСски Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

employee_v r1;

programmer_v p1;

r1.print ();//employee_v:print

p1.print ();//programmer_v:print

Π’ ΡΡ‚ΠΈΡ… Π΄Π²ΡƒΡ… случаях вызовутся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… классов. Π’Π°ΠΊ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π½Π΅Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ print (Ρ‚.Π΅. Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова virtual).

void print_v (employee_v* pr){

pr->print ();//employee_v:print ΠΈΠ»ΠΈ programmer_v:print

}

Π’ ΡΡ‚ΠΎΠΌ случаС ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ (print) ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ pr Π½Π° employee_v. Π’ ΡΠ»ΡƒΡ‡Π°Π΅, Ссли Π±Ρ‹ функция-Ρ‡Π»Π΅Π½ print Π±Ρ‹Π»Π° объявлСна Π½Π΅Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ, Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Π²Ρ‹Π·Π²Π°Π»Π°ΡΡŒ Π±Ρ‹ функция employee_v:print (Ρ‡Ρ‚ΠΎ опрСдСляСтся Ρ‚ΠΈΠΏΠΎΠΌ указатСля). Однако, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция print Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°, вызываСтся Π»ΠΈΠ±ΠΎ employee_v:print, Π»ΠΈΠ±ΠΎ programmer_v:print, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ pr Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° employee_v Π»ΠΈΠ±ΠΎ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° programmer_v. НапримСр:

employee_v r1, r2;

programmer_v p1, p2;

print_v (&r1);// employee_v:print

print_v (&p1);// programmer_v:print

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ print_v Π² Ρ†ΠΈΠΊΠ»Π΅:

employee_v *record[4]={&r1,&p1,&r2,&p2};

for (int i=0;i<4;++i){

print_v (record[i]);

}

Вызовутся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ порядкС: employee_v:print, programmer_v:print, employee_v:print, programmer_v:print.

Π’Π°ΠΊ ΠΊΠ°ΠΊ наша функция print_v Π²Ρ‹Ρ€ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Π² Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° print, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСпосрСдствСнно

for (int i=0;i<4;++i){

record[i]->print ();

}

Π’ ΡΠ»ΡƒΡ‡Π°Π΅, Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ employee класса Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½ΠΈ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС, Π½ΠΈ Π² ΠΊΠΎΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π² Π½Π°ΡˆΠ΅ΠΌ случаС этот ΠΊΠΎΠ΄ — ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ†ΠΈΠΊΠ»). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π΄Π°ΠΆΠ΅ Ссли ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π±Ρ‹Π» написан ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс programmer_v:print Π±Ρ‹Π» Π²ΠΎΠΎΠ±Ρ‰Π΅ Π·Π°Π΄ΡƒΠΌΠ°Π½! Π”Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ слуТит ΠΊΡ€Π°Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Когда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса (employee_v) Π²Π΅Π΄ΡƒΡ‚ сСбя «ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ» нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, это называСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ. Π’ΠΈΠΏ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, называСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Для достиТСния ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ повСдСния Π² C++ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· ссылки ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. ΠŸΡ€ΠΈ нСпосрСдствСнных манипуляциях с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ (Π±Π΅Π· ΠΏΠΎΠΌΠΎΡ‰ΠΈ указатСля ΠΈΠ»ΠΈ ссылки) Π΅Π³ΠΎ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ извСстСн компилятору, ΠΈ ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π½Π΅ Ρ‚рСбуСтся.

АбстрактныС классы МногиС классы схоТи с ΠΊΠ»Π°ΡΡΠΎΠΌ employee_v Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΊΠ°ΠΊ сами ΠΏΠΎ ΡΠ΅Π±Π΅ (employee_v Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΡ‚Π°Π²ΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅), Ρ‚Π°ΠΊ ΠΈ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π±Π°Π·Ρ‹ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов (programmer_v ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…). Для Ρ‚Π°ΠΊΠΈΡ… классов ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, описанныС Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΠΏΠΎΠ»Π½Π΅ достаточными. Однако Π½Π΅ Π²ΡΠ΅ классы ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ. НСкоторыС классы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ figure, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Класс figure ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π±Π°Π·Ρ‹ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов.

class figure{

public:

void move_to (int x, int y){_x=x; _y=y;}

virtual void draw (HDC);

virtual void rotate (double);//angle measured in degrees

protected:

figure (int x, int y):_x (x),_y (y){}

int _x,_y;

};

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΡ‚ figure классы ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ спСцифичСскиС Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

class circle: public figure{

public:

circle (int x, int y, int r)

:figure (x, y),_r®{}

virtual void draw (HDC);

virtual void rotate (double){};

private:

int _r;

};

class line: public figure{

public:

line (int x0, int y0,

int x1, int y1)

:figure (x0,y0),_dx (x1-x0),_dy (y1-y0)

{}

virtual void draw (HDC);

void rotate (double);

private:

int _dx,_dy;

};

Для figure Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

void figure: draw (HDC){

assert (false);//этот ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½

}

void figure: rotate (double){

assert (false);//этот ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½

}

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° создания Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ допустима, Π½ΠΎ Π½Π΅Ρ€Π°Π·ΡƒΠΌΠ½Π°:

figure f1(200,200);//Ρ„ΠΈΠ³ΡƒΡ€Π° с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ, Π½ΠΎ Π±Π΅Π· Ρ„ΠΎΡ€ΠΌΡ‹

circle c1(100,100,10);

line l1(120,100,130,105);

figure* mas[2]={&c1,&l1};

for (int i=0;i<2;++i){

mas[i]->draw (hdc);

mas[i]->move_to (100,110);

mas[i]->draw (hdc);

mas[i]->move_to (100,140);

mas[i]->rotate (40);

mas[i]->draw (hdc); }

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π’ΠΈΠ΄Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: композиция ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡ.

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π’ C++ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово template ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обСспСчСния парамСтричСского ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. Он ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ исходный ΠΊΠΎΠ΄ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚ΠΈΠΏ являСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ‚Π΅Π»Π° ΠΊΠΎΠ΄Π°.

Допустим Ρƒ Π½Π°Ρ Π΅ΡΡ‚ΡŒ класс stack3, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ стСка символов (char).

class stack3

{

public:

stack3();

void push (char c);

char pop ();

bool is_empty ()const;

bool is_full ()const;

private:

enum{ max_len=100};

int top;

char s[max_len];

};

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

stack3:stack3():top (0){}

void stack3: push (char c){

assert (top

s[top++]=c;

}

char stack3: pop (){

assert (top>0);

return s[—top];

}

bool stack3: is_empty ()const {return top==0;}

bool stack3: is_full ()const {return top==max_len;}

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

stack3 reverse_order (stack3 s){

stack3 tmp;

while (!s.is_empty ()){

tmp.push (s.pop ());

}

return tmp;

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ шаблона класса:

template class stack4

{

public:

stack4(); //конструктор

void push (T c);

T pop ();

bool is_empty ()const;

bool is_full ()const;

private:

enum{ max_len=100};

int top;

T s[max_len];

};

templatestack4:stack4():top (0){}

templatevoid stack4: push (T c){

assert (top

s[top++]=c;

}

templateT stack4: pop (){

assert (top>0);

return s[—top];

}

templatebool stack4: is_empty ()const {return top==0;}

templatebool stack4: is_full ()const

{return top==max_len;}

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ template ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ объявлСн шаблон (template), ΠΈ Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠΈ Π½Π° ΠΌΠ΅ΡΡ‚Π΅ T Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ фактичСский Ρ‚ΠΈΠΏ. T — имя Ρ‚ΠΈΠΏΠ°, Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ класса.

Имя шаблона класса, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Ρ‚ΠΈΠΏ, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки, являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ класса (опрСдСляСмого шаблона) ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… классов:

stack4 sc;

stack4 si;

stack4 sd;

Π‘Π΅Π· использования шаблонов для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ опрСдСлСния классов, Π° Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ шаблона — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ шаблона.

Ѐункция, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ со ΡΡ‚Π΅ΠΊΠΎΠΌ stack4:

stack4 reverse_order (stack4 s){

stack4 tmp;

while (!s.is_empty ()){

tmp.push (s.pop ());

}

return tmp;

}

Π¨Π°Π±Π»ΠΎΠ½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ с Π»ΡŽΠ±Ρ‹ΠΌ стСком:

template STACK reverse_order (STACK s){

STACK tmp;

while (!s.is_empty ()){

tmp.push (s.pop ());

}

return tmp;

}

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… инстанцирований Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая инстанцирования шаблона Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ свой Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

stack4 sc;//гСнСрируСтся 5 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

stack4 si1, si2;// гСнСрируСтся 5 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

//(количСство создаваСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΠΈ)

stack4 sd;//Π½Π΅ гСнСрируСтся Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ инстанцированиС stack4 ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΡˆΠ΅ Π’ Π½Π°ΡˆΠ΅ΠΌ классС stack Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push ΠΈ pop зависят ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° шаблона, поэтому ΠΈΡ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’Π°ΠΊ, функция push, сгСнСрированная для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° char, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ функция push, сгСнСрированная для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° int. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ is_empty ΠΈ is_full ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° шаблона Π½Π΅ Π·Π°Π²ΠΈΡΡΡ‚. Ѐункция is_empty для char Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ is_empty для int. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ гСнСрирования Π»ΠΈΡˆΠ½ΠΈΡ… (ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ…) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ. Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ класс ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ°, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ шаблоном. ΠŸΡ€ΠΈ этом Π² Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ Π·Π°Π²ΠΈΡΡΡ‰ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° шаблона.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ для нашСго стСка:

class stack5_base

{

public:

stack5_base ();

bool is_empty ()const;

bool is_full ()const;

protected:

enum{ max_len=100};

int top;

};

stack5_base:stack5_base ()

:top (0)

{}

bool stack5_base:is_empty ()const {return top==0;}

bool stack5_base:is_full ()const {return top==max_len;}

template class stack5: public stack5_base

{

public:

void push (T c);

T pop ();

private:

T s[max_len];

};

templatevoid stack5: push (T c){

assert (top

s[top++]=c;

}

templateT stack5: pop (){

assert (top>0);

return s[—top];

}

Для нашСго случая количСство сгСнСрированных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ:

//ΠΊ этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ сгСнСрировано 3 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для stack5_base

stack5 sc;//Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ 2 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

stack5 si1, si2;// Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ 2 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

//(количСство создаваСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΠΈ)

stack5 sd;//Π½Π΅ гСнСрируСтся Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ инстанцированиС stack4 ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΡˆΠ΅ Π¨Π°Π±Π»ΠΎΠ½Ρ‹ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ-значСниями Π’ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… stack3 ΠΈ stack4 для хранСния элСмСнтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ массив Π½Π° 100 элСмСнтов. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ расходуСтся Π½Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях этого количСства нСдостаточно ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ stack3 ΠΈ stack4 Π½Π΅ ΠΏΠΎΠ΄Ρ…одят для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ. Как ΠΆΠ΅ ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ шаблон Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ нСобходимости ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство элСмСнтов Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ шаблон? Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅) двумя путями.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ (ΡƒΠΆΠ΅ извСстный Π²Π°ΠΌ) — ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ количСство Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… элСмСнтов Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈ Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ динамичСски Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π° Π² Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ). ΠŸΡ€ΠΈ этом затрачиваСтся врСмя Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅/освобоТдСниС памяти.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ — ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ шаблон с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ количСство элСмСнтов. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ шаблон stack4 с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ этого. ΠŸΡ€ΠΈ этом для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… инстанцирований Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ наслСдования, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅:

class stack6_base

{

public:

stack6_base ();

bool is_empty ()const;

protected:

int top;

};

stack6_base:stack6_base ()

:top (0)

{}

bool stack6_base:is_empty ()const {return top==0;}

template class stack6_n:public stack6_base

{

public:

bool is_full ()const;

};

template bool stack6_n:is_full ()const {return top==N;}

template class stack6: public stack6_n

{

public:

void push (T c);

T pop ();

private:

T s[N];

};

template void stack6: push (T c){

assert (top

s[top++]=c;

}

template T stack6: pop (){

assert (top>0);

return s[—top];

}

Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ шаблона выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

stack6 sc;//стСк char Π½Π° 100 элСмСнтов

stack6 si1, si2;//стСк int Π½Π° 10 элСмСнтов

stack6 sd;//стСк char Π½Π° 5 элСмСнтов Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ шаблон Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ reverse_order, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, сгСнСрированными ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ stack6:

reverse_order (sс);

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ни ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚ся с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «Π³ΠΎΠ»Ρ‹Ρ…» конструкций языка. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΠ΅ программисты ΡƒΠΆΠ΅ написали ΠΊΠΎΠ΄, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ. НапримСр, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° MFC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для облСгчСния программирования для Win32 ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с «Ρ‡ΠΈΡΡ‚Ρ‹ΠΌ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ Win32 API. Win32 API ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ интСрфСйс ΠΊ Windows, Π° MFC — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ. Компания Borland прСдоставляСт для Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ†Π΅Π»Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ OWL.

C Run-Time Library — прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ°ΠΊΡ€ΠΎΡΡ‹ для ΠΌΠ½ΠΎΠ³ΠΈΡ… аспСктов программирования. Π­Ρ‚Π° Π±ΠΈΠ±ΠΈΠ»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ достаточно Π΄Π°Π²Π½ΠΎ, поэтому ΠΎΠ½Π° ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C (ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΡ). Π’Π°ΠΊ ΠΊΠ°ΠΊ C++ совмСстим с C, Ρ‚ΠΎ C Run-Time Library ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π² C+±ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ этой Π±ΠΈΠ±ΠΈΠ»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° сущСствуСт Π² Microsoft Visual Π‘++) Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° 19 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…:

ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²;

Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти (malloc, calloc ΠΈ Π΄Ρ€.);

ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ процСсса (exec, exit);

ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (memcpy, …);

классификация символов (isalpha);

ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… (atoi, _itoa, tolower);

ΠΎΡ‚Π»Π°Π΄ΠΊΠ° (_ASSERT, _CrtCheckMemory);

ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ (_chdir);

ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (_filelength);

матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (sin, cos, abs, floor, ldexp (mant, exponent));

Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ (getc, fwrite)

Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ (_open, _write)

Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ с/Π½Π° консоль ΠΈ ΠΈΠ·/Π² ΠΏΠΎΡ€Ρ‚ (_cprintf, _inp)

врСмя ΠΈ Π΄Π°Ρ‚Π° Π² ΡΡ‚ΠΈΠ»Π΅ C (clock, difftime)

Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ (bsearch, qsort)

ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² ΡΡ‚ΠΈΠ»Π΅ Π‘

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π΄ строками Π² ΡΡ‚ΠΈΠ»Π΅ C (strcmp, strcpy) ,

Π§Π°ΡΡ‚ΡŒ ΠΈΠ· ΡΡ‚ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ стандартизирована ANSI ΠΈ POSIX, Ρ‡Π°ΡΡ‚ΡŒ — Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Microsoft (всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΡ).

БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π°ΠΊ называСмая стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ C++.

Она прСдоставляСт Π½Π°Π±ΠΎΡ€ срСдств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°;

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ vector, list ΠΈ map) ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ (сортировка, слияниС, поиск ΠΈ Π΄Ρ€.)

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° числСнных расчСтов (комплСксныС числа, Π²Π΅ΠΊΡ‚ΠΎΡ€Π° с Π°Ρ€ΠΈΡ„мСтичСскими опСрациями ΠΈ Π΄Ρ€.)

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C (ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Ρ€Π°Π±ΠΎΡ‚Π° с C-строками ΠΈ Π΄Ρ€.)

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° срСдств языка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΈ Π΄Ρ€.)

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ std. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡ‚ΡŒ прСфиксом std, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ using namespace std; (Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ случаС тСряСтся прСимущСство ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½).

КаТдоС срСдство стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ становится доступным Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ стандартный Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строки, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Π° Π΄Π»Ρ использования списков —. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½ Π² [Бтрауструп].

Π’Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» — .

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° — cin, Π²Π²ΠΎΠ΄Π° — cout. Π’Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ для всСх встроСнных Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² ΠΏΠΎΡ‚ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² <> осущСствляСтся Π΄Π²Π° дСйствия: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, ΠΈ Π²Ρ‹Π²ΠΎΠ΄ этой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄Π°.

void f (){

cout<<10<<13.7<<οΏ½"abcd";

double d; int i;

cin>>d>>i;

}

Π—Π΄Π΅ΡΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов: 1,0,1,3,., 7, a, b, c, d.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ << ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ являСтся ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

Π’Π²ΠΎΠ΄ осущСствляСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ >>. Π’ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π² Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΎΠΉ части опрСдСляСт способ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ символов ΠΈ Ρ‚ΠΎ, ΠΊΡƒΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ значСния. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π²Π²ΠΎΠ΄Π° — cin.

Когда ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ символов, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° put ΠΈ get.

cout.put ('s');

char ch;

cin.get (ch);

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° чисСл (систСма счислСния, Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈ Π΄Ρ€.)

cout<<123.4567;

cout.setf (ios_base:showpos);

cout<<123.4567<<<123.4567;

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π’ ΡΡ‚. Π±ΠΈΠ±Π». имССтся Ρ‚ΠΈΠΏ string, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дополняСт строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹, использовавшиСся Ρ€Π°Π½Π΅Π΅. Π’ΠΈΠΏ string обСспСчиваСт мноТСство ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ строками, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ.

string s1="Hello", s2="world" ;

string s3=s1+", «+s2+'!';

cout<

Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (+) строк ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ. МоТно ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ строку со ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ, строковым Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ += добавляСт Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† строки:

s3+=' ';

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ ΡΠΎ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ:

if (s1==s2){ }

if (s3=="ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!"){ }

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

string s4=s3.substr (0,4);//взятиС подстроки

s4.insert (0," Road to «);//вставка

s4.replace (s4.find («Hell»), 4," Heaven");//поиск ΠΈ Π·Π°ΠΌΠ΅Π½Π°

TextOut (hdc, 1,1,s4.c_str (), s4. size ());//ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² C-строку ΠΈ Ρ‡ΠΈΡΠ»ΠΎ символов строки Π’ΠΎΠ³ΠΎ ΠΆΠ΅ эффСкта ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ C-строки, Π½ΠΎ ΡΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ строки string ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, прСдоставив систСмС Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Класс, Π³Π»Π°Π²Π½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², называСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. РСализация ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², подходящих для Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΡ… Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ опСрациями — ваТнСйшиС шаги ΠΏΡ€ΠΈ написании любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Π΅ΠΊΡ‚ΠΎΡ€ Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚

string

vector

list

ostream, istream, ofstream, ifstream, ostringstream.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠŸΠΎΠ½ΡΡ‚ΠΈΡ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ — сообщСния — Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ — классы — ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ — ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ (наслСдованиС).

ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡŽ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ языку.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. НСсколько Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ для C++ ΠΈΠ· [5]:

  • Β· Π’Π΅Π·Π΄Π΅, Π³Π΄Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ const.
  • Β· Для классов с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ памяти ΠΎΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания.
  • Β· ΠžΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.
  • Β· Π’Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π΄ΡƒΠΌΡ‹Π²Π°ΠΉΡ‚Π΅ использованиС встраиваСмых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  • Β· Π£ΠΌΠ΅Π½ΡŒΡˆΠ°ΠΉΡ‚Π΅ зависимости Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈ компиляции.
  • Β· ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ошибки Π²ΠΎ Π²Ρ€Π΅ΠΌΡ компиляции ошибкам Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния.

Π’ [5]приводятся обоснования, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΈ Π²Ρ‹Π³ΠΎΠ΄Ρ‹ ΠΎΡ‚ ΠΏΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ этих ΠΏΡ€Π°Π²ΠΈΠ».

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования. (Design Patterns)

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ — ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования (Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с template).

Под ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ проСктирования понимаСтся описаниС взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ контСкстС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ Document-View Π² MFC.

Document Ρ…Ρ€Π°Π½ΠΈΡ‚ прСдставлСниС, Π° View (Π’ΠΈΠ΄) опрСдСляСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° ΡΠΊΡ€Π°Π½Π΅. ΠœΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΎΠΌ Π² MFC установлСн ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» взаимодСйствия «ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ°/ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅». Π’ΠΈΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ внСшнСС прСдставлСниС ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ состояниС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π°Π΅Ρ‚ всС зависящиС ΠΎΡ‚ Π½Π΅Π³ΠΎ Π²ΠΈΠ΄Ρ‹, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Π²ΠΈΠ΄ обновляСт сСбя. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ нСсколько Π²ΠΈΠ΄ΠΎΠ², обСспСчив Ρ‚Π΅ΠΌ самым Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ прСдставлСния. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄, Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

НСсколько ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² ΠΈΠ· [6].

  • Β· FaΠ·ade (Ѐасад) ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ интСрфСйса для Π½Π°Π±ΠΎΡ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… интСрфСйсов Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅.
  • Β· Adapter (АдаптСр) ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ стандартного интСрфСйса класса Π² ΠΈΠ½Ρ‚СрфСйс, Π±ΠΎΠ»Π΅Π΅ подходящий для Π½ΡƒΠΆΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
  • Β· Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€
ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ