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

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Π΅ срСдства Π² C ΠΈ Π‘++

ΠšΡƒΡ€Ρ Π»Π΅ΠΊΡ†ΠΈΠΉΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ объявлСнии массивов Π² Π‘ΠΈ/Π‘ΠΈ++ количСство элСмСнтов массива задаСтся константой ΠΈ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ массив отсутствуСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ индСксов массива, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΠΌΡ‹ΠΌ ошибкам Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ систСму классов для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ динамичСских массивов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ элСмСнты ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Π΅ срСдства Π² C ΠΈ Π‘++ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Π΅ срСдства Π² C ΠΈ Π‘++

3.1 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия прСпроцСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (ΠΌΠ°ΠΊΡ€ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°) — это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΏΡƒΡ‚Π΅ΠΌ Π·Π°ΠΌΠ΅Π½Ρ‹ прСпроцСссорных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ прСпроцСссорных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора).

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС прСпроцСссорныС срСдства Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ прСпроцСссорных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠ΅Π½Π½Ρ‹Ρ… ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ;

— ΡΡ€Π΅Π΄ΡΡ‚Π²Π° управлСния просмотром ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ тСкста;

— ΠΏΡ€Π°Π²ΠΈΠ»Π° подстановки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ прСпроцСссорной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ макросом, Π° ΠΏΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΡƒ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ тСкст — ΠΌΠ°ΠΊΡ€ΠΎΡ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ.

ΠœΠ°ΠΊΡ€ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° состоит Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ просмотрС исходного тСкста ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡ Π² Π½Π΅ΠΌ лСксСм — сканировании тСкста. Если выдСлСнная лСксСма являСтся прСпроцСссорной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ½Π° замСняСтся Π½Π° ΡΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚. Π΅. строится ΠΌΠ°ΠΊΡ€ΠΎΡ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Если встрСчаСтся прСпроцСссорная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°, Ρ‚ΠΎ ΠΎΠ½Π° выполняСтся. ЛСксСмы, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ прСпроцСссорными ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ, пСрСносятся Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ тСкст Π±Π΅Π· измСнСния. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ являСтся тСкст, Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΠΈΠΉ прСпроцСссорных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈ ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Если исходный тСкст Π±Ρ‹Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° C ΠΈΠ»ΠΈ C++, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΌΠ°ΠΊΡ€ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ тСкст Π½Π° C ΠΈΠ»ΠΈ C++.

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

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ исходных тСкстов ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π² Π‘ΠΈ/Π‘ΠΈ++ это выполняСтся ΠΏΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅

# include имя Ρ„Π°ΠΉΠ»Π° Если Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» находится Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠΉ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ°Ρ… ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСды Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ options-directory-include, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько ΠΏΡƒΡ‚Π΅ΠΉ, раздСляя ΠΈΡ… Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с Π·Π°ΠΏΡΡ‚ΠΎΠΉ, имя Ρ„Π°ΠΉΠ»Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡƒΠ³ΠΎΠ»ΠΊΠΎΠ²Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

# include

Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях указываСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…:

# include «c:myincludinclud1.h»

ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΌΠ΅ΡΡ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #include вставляСтся тСкст ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки исходного Ρ„Π°ΠΉΠ»Π° ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ Π²Π½ΠΈΠ·, послС Ρ‡Π΅Π³ΠΎ вставлСнный тСкст сканируСтся прСпроцСссором.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора всСгда записываСтся с Π½ΠΎΠ²ΠΎΠΉ строки ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символом Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊ #, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ Π·Π½Π°ΠΊΠΈ табуляции. ΠšΠΎΠ½Ρ†ΠΎΠΌ тСкста Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ слуТит ΠΊΠΎΠ½Π΅Ρ† строки. Если Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ся Π² ΠΎΠ΄Π½ΠΎΠΉ строкС, Π² ΠΊΠΎΠ½Ρ†Π΅ строки ставится Π·Π½Π°ΠΊ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° продолТаСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк продолТСния Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ся.

3.2. ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Π°Ρ пСрСмСнная (макроимя) ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ

# define ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ НапримСр:

# define L_NAME 6

# define END_FORMULA `;'

# define DEBUG

Если объявлСнноС Ρ‚Π°ΠΊΠΈΠΌ способом макроимя встрСтится Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

char namevar [L_NAME]; // эквивалСнтно char namevar[6];

if (c ≠ END_FORMULA) … // if (c ≠ `;')…

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ DEBUG объявлСна. Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния. Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ тСкстС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ. объявлСно ΠΈΠ»ΠΈ Π½Π΅Ρ‚ это имя, ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

ОбъявлСнноС Π² define макроимя извСстно прСпроцСссору ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΅Π³ΠΎ объявлСния Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΡ‚рСтится Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°

# undef имя НапримСр, #undef DEBUG

Если Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ тСкстС встрСтится имя DEBUG, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅, Π° Π½Π΅ ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅ имя.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ряд ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ°ΠΊΡ€ΠΎΠΈΠΌΠ΅Π½, прСдусмотрСнных стандартами Π½Π° ΡΠ·Ρ‹ΠΊΠΈ C ΠΈ C++, Π² Ρ‚ΠΎΠΌ числС:

_ _LINE_ _ - Π½ΠΎΠΌΠ΅Ρ€ строки Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅,

_ _FILE_ _ - имя ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°,

_ _DATE_ _ - Π΄Π°Ρ‚Π° Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСпроцСссором,

_ _TIME_ _ - врСмя Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ,

_ _STDC_ _ - ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ стандарту ANSI.

_ _cplusplus — ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΡΠΎΠΎΡ‚вСтствии с ΡΠΈΠ½Ρ‚аксисом Π‘ΠΈ++,

_ _PASCAL_ _ - ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ «ΠΈΠΌΡ языка Pascal»

ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° нСльзя ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π² #define ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² #undef.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ FILE, DATE ΠΈ TIME ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ…, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для указания, какая вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

cout << «n Π€Π°ΠΉΠ» «<< __FILE__ << «ΠžΡ‚ «<< __DATE__ << «n»;

ΠœΠ°ΠΊΡ€ΠΎΡ PASCAL примСняСтся ΠΏΡ€ΠΈ описании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для использования Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, написанных Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Pascal, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Windows.

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Π‘ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Ρ‚ΠΈΠΏΠ°

#define MAX_LEN 80

ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для задания ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… констант.

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

описатСля const Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ вСрсии Π‘ΠΈ ΠΈ Π² Π‘ΠΈ++ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ константы Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

3.3. ΠœΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ (макросы)

РассмотрСнный Π²Ρ‹ΡˆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define — частный случай. ΠŸΠΎΠ»Π½Ρ‹ΠΉ синтаксис этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

# define ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹) список_Π·Π°ΠΌΠ΅Π½Ρ‹ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, список Π·Π°ΠΌΠ΅Π½Ρ‹ — это тСкст Π½Π° C, C++, содСрТащий ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

# define MAX (a, b) ((a) > (b))? (a): (b)

# define PRINT (a) cout<< #a<<οΏ½"= «<<(a)<

Если Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ дСйствия этих ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ встрСтится тСкст

x = MAX (y + p, s);

Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π°

x = ((y + p) > (s))? (y + p): (s);

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ PRINT (x) Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π°

cout<<οΏ½"x"<<οΏ½"= «<<(x)<

Π—Π½Π°ΠΊ # ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° рассматриваСтся ΠΊΠ°ΠΊ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π». Если ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π² ΠΌΠ°ΠΊΡ€ΠΎΡ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ стоят Π·Π½Π°ΠΊΠΈ ##, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡΡ†Π΅ΠΏΠ»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ сцСплСния строк, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

# define VAR (a, b) (a##b)

x = d [ VAR (i, j)]; // x = d [ (ij)];

ИспользованиС макросов Π² Ρ€ΡΠ΄Π΅ случаСв позволяСт ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ наглядным. НапримСр, Ссли ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ макросы

#if defined (__cplusplus)

# define _PTRDEF (name) typedef name * P##name;

# define _REFDEF (name) typedef name & R##name;

# define _STRUCTDEF (name) struct name;

_PTRDEF (name)

_REFDEF (name)

#endif

Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ строкой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

_STRUCTDEF (MyStruct)

ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ имя структурного Ρ‚ΠΈΠΏΠ° MyStruct, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΡ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ PMyStruct ΠΈ Ρ‚ΠΈΠΏ ссылки Π½Π° Π½Π΅Π³ΠΎ RMyStruct, Ρ‚. Π΅. ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ тСкстС строчки

struct MyStruct;

typedef MyStruct *PMyStruct;

typedef MyStruct &RMystruct;

3.4. Условная компиляция

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора # if, # else, # endif ΠΈ # elif ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… условий, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² тСкста:

# if ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅_условиС тСкст 1

# else

тСкст 2

# endif

дальнСйший тСкст.

УсловиС — это константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ строится ΠΈΠ· ΠΌΠ°ΠΊΡ€ΠΎΠΈΠΌΠ΅Π½, констант ΠΈ Π·Π½Π°ΠΊΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ логичСскиС связки && ΠΈ | |. ДопускаСтся Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ sizeof (имя_Ρ‚ΠΈΠΏΠ°) ΠΈ ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Π°Ρ функция defined (макроимя), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ 1, Ссли это макроимя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, ΠΈ 0, Ссли ΠΎΠ½ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ. ВмСсто Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹

# if defined (DEBUG)

ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

# ifdef DEBUG

Π° Π²ΠΌΠ΅ΡΡ‚ΠΎ

# if! defined (DEBUG)

Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

# ifndef DEBUG

ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ #if — #else ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ #else — #if замСняСтся ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #elif с ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ:

# if ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠ΅_условиС1

тСкст 1

# elif прСпроцСссорноС_условиС2

тСкст2

# else

тСкст3

# endif

Π’ Ρ„Π°ΠΉΠ»Π°Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² для прСдотвращСния ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ присутствуСт тСкст Π²ΠΈΠ΄Π°:

#if !defined (_ _DEFS_H)

#define _ _DEFS_H

/* ВСкст ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² */

#endif /* ΠšΠΎΠ½Π΅Ρ† _ _DEFS_H */

4. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСдства Π‘++

4.1 ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… — это Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ опрСдСляСмыС программистом, описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… этого Ρ‚ΠΈΠΏΠ°, ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, допустимых Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ этого Ρ‚ΠΈΠΏΠ° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ-Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Для сохранСния совмСстимости с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π½Π° Π‘ΠΈ ΡΠΈΠ½Ρ‚аксис описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² Π‘ΠΈ++ Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ описанию структурного Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° объСдинСния Π² Π‘ΠΈ. Π’ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΠΈ структуры ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π² Π‘ΠΈ++ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²: структура (struct), объСдинСниС (union) ΠΈ ΠΊΠ»Π°ΡΡ (class), Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ возмоТностями доступа ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Ρ‚ΠΈΠΏΠ°. Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ для краткости всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ классами. ОписаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° строится ΠΏΠΎ ΡΡ…Π΅ΠΌΠ΅:

Π²Π°Ρ€ΠΈΠ°Π½Ρ‚_Ρ‚ΠΈΠΏΠ° имя_Ρ‚ΠΈΠΏΠ°: список_Π±Π°Π·ΠΎΠ²Ρ‹Ρ…_классов

{ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Ρ‡Π»Π΅Π½Ρ‹) класса }

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΈΡ… Ρ‡Π°ΡΡ‚ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° класса устанавливаСтся ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа Π»ΠΈΠ±ΠΎ явно, ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ уровня доступа ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов public, protected ΠΈΠ»ΠΈ private с Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ, Π»ΠΈΠ±ΠΎ нСявно, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ уровня доступа относится ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ класса, ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΡ‚рСтится ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ уровня доступа. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ доступа public Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ доступ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ класса ΠΈΠ· Π»ΡŽΠ±ΠΎΠ³ΠΎ мСста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ извСстна пСрСмСнная этого класса. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ доступа private Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ доступ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ класса Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² этого класса. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ доступа protected ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ичСской систСмС классов ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ доступ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ этого уровня ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ класса Ρ‚ΠΈΠΏΠ° struct принимаСтся ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа public, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ явно Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ доступа, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ класса Ρ‚ΠΈΠΏΠ° class ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ private, явно ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ, для класса Ρ‚ΠΈΠΏΠ° union ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа public ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.

НапримСр, ΠΏΡƒΡΡ‚ΡŒ программист Ρ€Π΅ΡˆΠΈΠ» Π² ΠΊΠ»Π°ΡΡΠ΅ TPoint (Ρ‚ΠΎΡ‡ΠΊΠ°) Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ внСшний доступ ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ внСшний доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ пСрСмСщСния Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ. ОписаниС класса TPoint ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

class TPoint

{ private:

int x, y;

public:

void movePoint (int newx, int newy); // Π² Π½ΠΎΠ²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ

void relmove (int dx, int dy); // смСщСниС Π½Π° dx, dy

int getx (void) (return x; };

int gety (void) { return y; };

};

ОписаниС Ρ‚Π΅Π»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ класса, ΠΊΠ°ΠΊ это сдСлано Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ getx ΠΈ gety, ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π²Π½Π΅ описания класса. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π΅ нСявно ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π·Π²Π°Π½Π° функция ΠΈ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ класса. Π’ ΡΠ²ΡΠ·ΠΈ с ΡΡ‚ΠΈΠΌ ΠΏΡ€ΠΈ описании Ρ‚Π΅Π»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½Π΅ описания класса Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ контСкста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ компилятор ΠΎ ΠΏΡ€ΠΈΠ½Π°ΠΆΠ΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊ ΠΊΠ»Π°ΡΡΡƒ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса TPoint ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

void TPoint:: movePoint (int newx, int newy)

{ x = newx; y = newy; }

void TPoint:: relmove (int dx, int dy)

{ x += dx; y += dy; }

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚-Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ создании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-конструкторы. Имя конструктора совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚ΠΈΠΏΠ°, конструктор Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния ΠΈ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ся Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. Для рассмотрСнного Π²Ρ‹ΡˆΠ΅ класса TPoint ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· конструктора ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ movePoint. Рассмотрим Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° класс TRect, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ со ΡΡ‚ΠΎΡ€ΠΎΠ½Π°ΠΌΠΈ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ осям ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚:

enum Boolean {FALSE, TRUE };

class TRect

{ public:

TPoint a, b; // a — Π»Π΅Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ», b — ΠΏΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ»

void move (int dx, int dy) // ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

{ a. relmove (dx, dy); b. relmove (dx, dy);}

void grow (int dx, int dy) // ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ²

{ a. x +=dx; a. y += dy; b. x +=dx; b. y += dy; }

void intersect (const TRect& r); // общая Ρ‡Π°ΡΡ‚ΡŒ Π΄Π²ΡƒΡ… ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²

void Union (const TRect& r); /* ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΄Π²Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° */

Boolean contains (const TPoint& p);

/* TRUE, Ссли Ρ‚ΠΎΡ‡ΠΊΠ° p ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΡƒ */

Boolean isEmpty ();

/* TRUE, Ссли ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈΠ»ΠΈ высота ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ */

TRect (int ax, int ay, int bx, int by) // конструктор

{ a, x — ax; a, y = ay; b. x = bx; b. y = by; };

TRect (TPoint p1, TPoint p2) // конструктор

{ a = p1; b = p2; };

TRect () // конструктор

{ a. x = a. y = b. x = b. y = 0; };

};

/* ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса TRect */

void TRect:: intersect (const TRect& r)

{ a. x = max (a.x, r.a.x); b. x = min (b.x, r.b.x);

a.y = max (a.y, r.a.y); b. y = min (b.y, r.b.y);

};

void TRect:: Union (const TRect & r)

{ a. x = (a.x <= r.a.x)? a. x: r.a.x ;

a.y = (a.y <= r.a.y)? a. y: r.a.y ;

b.x = (b.x >= r.b.x)? b. x: r.b.x ;

b.y = (b.y >= r.b.y)? b. y: r.b.y ;

};

Boolean TRect:: contains (const TPoint & p)

{ return Boolean (p.x >= p. x && p. x < b. x && p. y >= a. y && p. y < b. y); };

Boolean TRect:: isEmpty ()

a.y >= b. y); ;

Π‘ΠΎΠ»Π΅Π΅ полная информация ΠΎ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° строится ΠΏΠΎ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Π½ΠΎ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ конструктора, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

TRect r1(2,4,20,50); // инициализация с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ конструктора

TRect *pr = &r1; // ΡƒΠΊΠ·Π°Ρ‚Π΅Π»ΡŒ Π½Π° TRect

TRect r2, *ptr; // для r2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ new для размСщСния Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ памяти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ конструктора этого Ρ‚ΠΈΠΏΠ°:

ptr = new TRect (7,3,18,40);

Для обращСния ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° имя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π½Π΅Π΅:

r1.grow (2, -3);

pr->move (1, 1);

Boolean bb= r1. isEmpty ();

4.2. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

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

Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, конструктор всСгда ΠΈΠΌΠ΅Π΅Ρ‚ имя, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса, для Π½Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ся Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния ΠΈ ΠΎΠ½ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚-Π΄Π°Π½Π½Ρ‹Ρ…. Для класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСно нСсколько конструкторов, Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ числом ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ конструкторов: конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ копирования с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ — ссылкой Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Если для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ конструктора, компилятор создаСт для Π½Π΅Π³ΠΎ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ копирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, Ссли пСрСмСнная ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° пСрСдаСтся Π² ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ.

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

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ TString для прСдставлСния строковых Π΄Π°Π½Π½Ρ‹Ρ… с Π±ΠΎΠ»Π΅Π΅ высокой ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ΠΎΡˆΠΈΠ±ΠΎΠΊ, Ρ‡Π΅ΠΌ это обСспСчСно стандартными функциями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строк ΠΈΠ· Ρ„Π°ΠΉΠ»Π°-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° string.h.

#include

#include

class TString

{ public:

TString (); // конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

TString (int n, char* s=0); // конструктор, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡƒΡΡ‚ΡƒΡŽ строку

/* конструктор, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ массив ΠΈΠ· char с Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΌ Π½ΡƒΠ»Π΅ΠΌ

Π² Ρ‚ΠΈΠΏ TString */

TString (char* s);

TString (TString& st); // конструктор копирования

~TString (); // дСструктор

void print (); // Π²Ρ‹Π²ΠΎΠ΄ строки Π½Π° ΡΠΊΡ€Π°Π½

int sz; // Π΄Π»ΠΈΠ½Π° строки

char* ps; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния строки

};

/* ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса TString */

TString:TString (){sz=0; ps=0;}

TString:TString (int n, char* s)

{ sz=n; ps=new char[n+1];

strncpy (ps, s, n); ps[sz]='';

}

TString:TString (char* s)

{ sz=strlen (s)+1; ps=new char[sz];

strcpy (ps, s);

}

TString:TString (TString& str)

{ sz = str. sz; ps=new char[sz+1];

strcpy (ps, str. ps);

}

TString:~TString ()

{ if (ps ≠ 0) delete [] ps; }

void TString: print ()

{ if (sz == 0)

{ cout << «Π‘Ρ‚Ρ€ΠΎΠΊΠ° пустая «<< endl; return;}

cout<<" Π‘Ρ‚Ρ€ΠΎΠΊΠ° = «<< ps <

}

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ использованиС Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° TString.

int main ()

{ char rabstr = «yes» ;

while (*rabstr ≠'n')

{ cin >> rabstr;

if (*rabstr == 'n')break;

TString s1();

TString s2(6);

TString s3(6, rabstr);

TString* ps1=new TString («Π­Ρ‚ΠΎ строка ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ»);

cout <<" s1="; ps1->print ();

cout <<" s2="; s2. print ();

cout <<" s3="; s3. print ();

}

return 0;

}

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

class TPoint

(…

public:

TPoint (int x0, int y0): x (x0), y (y0){ };

}

Π’ ΡΡ‚ΠΎΠΌ конструкторС всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ значСния ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π΅Π»ΠΎ конструктора прСдставлСно пустым составным ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

4.3. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы

ΠšΠ»Π°ΡΡΡ‹ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру, ΠΊΠΎΠ³Π΄Π° выдСляСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, содСрТащий ΠΎΠ±Ρ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π³Ρ€ΡƒΠΏΠΏΡ‹ сходных классов, ΠΈ ΡΡ‚роится нСсколько ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. ОписаниС систСмы классов Π² ΡΡ‚ΠΎΠΌ случаС выглядит Ρ‚Π°ΠΊ:

class TA // Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс

{ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ TA }

class TAA: public TA // класс, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° TA

{ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ TAA }

class TAAB: public TAA // класс, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° TAAB

{ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ TAAB }

Доступом ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова public ΠΈ private. Если Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс public, Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС public-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса останутся public, protected-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса останутся protected, private-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π±ΡƒΠ΄ΡƒΡ‚ нСдоступны.

Если Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс private, Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС public ΠΈ protected ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса доступны для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, Π½ΠΎ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ private, Ρ‚. Π΅. Π±ΡƒΠ΄ΡƒΡ‚ нСдоступны, private-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса нСдоступны Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ конструктор своСго Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса:

class TBase

{ public: TBase (int s, int m, int d);

/* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса TBase */

}

class TVect: public TBase

{ public: TVect (int k, int s, int m int d): TBase (s, m, d)

{ /* инициализация ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ TVect */};

}

4.4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ построСния систСмы классов

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ объявлСнии массивов Π² Π‘ΠΈ/Π‘ΠΈ++ количСство элСмСнтов массива задаСтся константой ΠΈ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ массив отсутствуСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ индСксов массива, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΠΌΡ‹ΠΌ ошибкам Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ систСму классов для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ динамичСских массивов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ элСмСнты ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива. ΠžΠ±Ρ‰ΠΈΠ΅ свойства массивов с Ρ‚Π°ΠΊΠΈΠΌΠΈ сойствами, Π½Π΅ Π·Π°Π²ΠΈΡΡΡ‰ΠΈΠ΅ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° элСмСнтов массива, объСдиним Π² ΠΊΠ»Π°ΡΡΠ΅ TBase, Π° Π΄Π»Ρ массивов с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ элСмСнов ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ свои классы. Описания классов объСдиним Π² Ρ„Π°ΠΉΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² TBASEARR. H, Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π² Ρ„Π°ΠΉΠ»Π΅ TBASEARR.CPP.

// Ρ„Π°ΠΉΠ» TBASEARR. H

#include

#include

class TBase //Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для массивов всСх Ρ‚ΠΈΠΏΠΎΠ²

{int size, //Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта

count, //Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число элСмСнтов

maxCount, //Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти Π² Π±Π°ΠΉΡ‚Π°Ρ…

delta; //ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ памяти Π² Π±Π°ΠΉΡ‚Π°Ρ…

char *pmem; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ

int changeSize (); //пСрСраспрСдСлСниС памяти

protected:

void* getAddr (){return (void*) pmem;};

void addNewItem (void*); //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ† массива

void error (const char* msg){cout <

public:

int getCount () {return count;};

TBase (int s, int m, int d);

TBase ();

TBase (TBase&);

~TBase ();

};

/* Массив с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° int */

class TIntArray: public TBase

{ public:

int getElem (int index); // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ

void putElem (int index, int &pe); // Π—Π°ΠΌΠ΅Π½Π° значСния элСмСнта ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ

void addElem (int& el); // Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта Π² ΠΊΠΎΠ½Π΅Ρ† массива

TIntArray& add (TIntArray&); // Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… массивов поэлСмСнтно

TIntArray& subtract (TIntArray&); // Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ массивов

void printElem (int index); // Π’Ρ‹Π²ΠΎΠ΄ значСния элСмСнта Π½Π° ΡΠΊΡ€Π°Π½

void print (); // Π’Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ всСго массива

TIntArray (int m, int d):TBase ((int)sizeof (int), m, d){ }; /*ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ */

TIntArray (TBase& a):TBase (a){}; /*ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ */

~TIntArray ();

};

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ TBASEARR. CPP:

#include

#include

#include

#include

/* ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса TBase */

TBase:TBase (int s, int m, int d):size (s), maxCount (m), delta (d)

{char* p;

int k;

count = 0; p = pmem = new char [size * maxCount];

for (k=0; k < maxCount; k++)

{ *p = ''; p++;}

}

TBase:TBase ():size (1), maxCount (10), delta (1)

{char* p;

int k;

count = 0; p = pmem = new char [size *maxCount];

for (k=0; k < maxCount; k++)

{ *p = ''; p++;}

}

TBase:TBase (TBase& b):size (b.size), maxCount (b.maxCount), delta (b.delta)

{ int k;

count = b. count; pmem = new char [size * maxCount];

for (k=0; k < maxCount * size; k++)

{ pmem[k] = b. pmem[k]; }

}

TBase:~TBase ()

{ delete [ ] pmem; }

4.5 Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

4.5.1. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΎ «ΠΏΠΎΠ·Π΄Π½Π΅ΠΌ» связывании

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

4.5.2. ОписаниС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Ѐункция-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° класса ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова virtual. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚Π΅ΠΌ ΠΆΠ΅ списком ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Ρ‡Ρ‚ΠΎ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ функция Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Если ΠΈΠ· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π½Π΅ ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ся Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово virtual Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

Если Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС Π½Π΅Ρ‚ объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ функция Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСна Π² Ρ„ΠΎΡ€ΠΌΠ΅:

virtual void print () = 0;

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

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ класса трСбуСтся ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ класса, Π° ΡΠ°ΠΌ этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ указатСля Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс. ΠŸΡƒΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠ»Π°ΡΡΠ΅ TBase объявлСна чистая Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция print:

class TBase //Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для массивов всСх Ρ‚ΠΈΠΏΠΎΠ²

{int size, //Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта

count, //Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число элСмСнтов

maxCount, //Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти Π² Π±Π°ΠΉΡ‚Π°Ρ…

delta; //ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ памяти Π² Π±Π°ΠΉΡ‚Π°Ρ…

char *pmem; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ

int changeSize (); //пСрСраспрСдСлСниС памяти

protected:

void* getAddr (){return (void*) pmem;};

void addNewItem (void*); //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ† массива

void error (const char* msg){cout <

public:

int getCount () {return count;};

TBase (int s, int m, int d);

TBase ();

TBase (TBase&);

~TBase ();

virtual void print () = 0; // Чистая Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция

};

Π’ΠΎΠ³Π΄Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ объявлСна Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π°Ρ Π΅Π΅ Ρ„ункция print, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ дСйствия:

class TIntArray: public TBase

{ /* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ */

virtual void print ();

}

class TRealArray: public TBase

{ /* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ */

virtual void print ();

}

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов TIntArray ΠΈ TRealArray ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ экзСмпляры этих классов с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ обращСния ΠΊ Π½ΠΈΠΌ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс:

TBase *pb;

TIntArray aint (5,3);

TRealArray areal (4,2);

Π’ΠΎΠ³Π΄Π° для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ массивов ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

pb = &aint; pb->print (); //ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ массива aint

pb = &areal; pb->print (); // ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ массива areal

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡƒΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠΌΠ°ΡˆΠ½ΠΈΡ… ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠΈΠ» завСсти ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ своих Π»ΡŽΠ±ΠΈΠΌΡ†Π΅Π² ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» свой класс с ΠΎΠ±Ρ‰ΠΈΠΌ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом Pet. Для краткости ограничимся Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ Π΅Π³ΠΎ ΠΊΠ»ΠΈΡ‡ΠΊΠΎΠΉ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌ ΠΈΠ·Π»Π°Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹ΠΌ Π·Π²ΡƒΠΊΠΎΠΌ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡΠΊΡ€Π°Π½ списка ΠΊΠ»ΠΈΡ‡Π΅ΠΊ ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚авлСния ΠΈΠ·Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠΌΠΈ Π·Π²ΡƒΠΊΠΎΠ².

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

#include

struct Pet // Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс

{ char *name;

virtual void speak () = 0;

Pet (char *nm){name=nm;}

}

struct Dog: public Pet

{ virtual void speak () { cout<<οΏ½" Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ««<<οΏ½» Ав — Π°Π²"<

Dog (char *nm): Pet (nm) { };

};

struct Cat: public Pet

{ virtual void speak () { cout<<οΏ½" Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ «

<<οΏ½" ΠœΡΡƒ-ΠœΡΡƒ"<

Cat (char *nm): Pet (nm) { };

}

int main ()

{ Pet *mypets[ ] = { new Dog («Π¨Π°Ρ€ΠΈΠΊ»),

new Cat («ΠœΡƒΡ€ΠΊΠ°»),

new Dog («Π Ρ‹ΠΆΠΈΠΉ «)}; // Бписок ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…

const int sz = sizeof (mypets)/ sizeof (mypets [ 0 ]);

for (int k = 0: k < sz; k++)

mypets [ k ]->speak ();

return 0;

}

4.6. «Π”руТСствСнныС» (friend) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция, объявлСнная Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ (protected) ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰ΠΈΠΌ (public) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Ѐункция, объявлСнная Π²Π½Π΅ класса, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ (public) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ класса ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½ΠΈΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ указатСля Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса Π₯ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΊ Π½ΠΈΠΌ доступа, эта функция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ объявлСна друТСствСнной Π² ΠΊΠ»Π°ΡΡΠ΅ X:

class X

{ friend void Y: fprv (int, char*);

/* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса X */

}

МоТно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ класса Y Π΄Ρ€ΡƒΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ X;

class Y;

class X

{ friend Y;

/* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса X */

}

class Y

{ void fy1(int, int);

int fy2(char*, int);

/* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса Y */

}

ДруТСствСнной ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ„ункция, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΉ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

class XX

{ friend int printXX ();

/* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса Π₯Π₯ */

}

Π—Π΄Π΅ΡΡŒ функция printXX ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ класса XX, нСзависимо ΠΎΡ‚ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π° Π½ΠΈΠΌΠΈ уровня доступа.

Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования считаСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ спроСктированной систСмС классов Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ нСобходимости Π² Π΄Ρ€ΡƒΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Ρ… функциях, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Ρ€ΡΠ΄Π΅ случаСв ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

4.7. БтатичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса

ΠžΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ static Π² Π‘++ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Скста, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ класса ΠΈ Π²Π½Π΅ Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»Π΅ΠΌ static, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ static Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΈΠ΄ΠΈΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ свои значСния послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

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

class TBase //Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для массивов всСх Ρ‚ΠΈΠΏΠΎΠ²

{ static int nw;

int size, //Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта

count, //Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число элСмСнтов

maxCount, //Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти

delta; //ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ памяти

/* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса TBase */

}

int TBase: nw =1; /* Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ статичСской ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса */

БтатичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ — Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса ΠΈ ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΠΌΠ΅ΡŽΡ‚ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΡΡ‚атичСским Π΄Π°Π½Π½Ρ‹ΠΌ класса:

class X

{ static int sx1, sx2;

static void fsx (int k);

int x1, x2;

/* Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса X */

}

int X: sx1 = 1;

int X: sx2 = 2;

int main ()

{ …

X: fsx (3);

}

4.8. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ°) ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

Π’ ΡΠ·Ρ‹ΠΊΠ°Ρ… программирования ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° сСмантика ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, выполняСмых Π½Π°Π΄ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ (ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ) Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли x, y ΠΈ z — ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° float, Ρ‚ΠΎ Π·Π°ΠΏΠΈΡΡŒ x = y + z; ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ дСйствия, слоТСниС x ΠΈ y ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ z ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ суммы.

Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈ Π΄Π»Ρ Ρ‚ΠΈΠΏΠΎΠ², опрСдСляСмых Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π² Ρ‚ΠΎΠΌ числС для классов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ сСмантику ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ слоТСния, вычитания, умноТСния ΠΈ Ρ‚. Π΄., Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ вмСсто Π²Ρ‹Π·ΠΎΠ²Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ просто x + y ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅, ΠΊΠΎΠ³Π΄Π° x ΠΈ y ΡΠ²Π»ΡΡŽΡ‚ся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… классов. Π’ C++ это достигаСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² ΡΠ·Ρ‹ΠΊΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ опСрация ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ:

Ρ‚ΠΈΠΏ_Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° operator Π·Π½Π°ΠΊ_ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹)

{ описаниС_Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°_выполнСния_ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ }

НапримСр:

class TPoint

{ int x, y;

public:

TPoint& operator+=(const TPoint& adder);

TPoint& operator-=(const TPoint& subber);

friend TPoint operator — (const TPoint& one, const TPoint& two);

friend TPoint operator + (const TPoint& one, const TPoint& two);

friend int operator == (const TPoint& one, const TPoint& two);

friend int operator ≠ (const TPoint& one, const TPoint& two);

};

ПолноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса TPoint ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

inline TPoint& TPoint: operator += (const TPoint& adder)

{ x += adder. x; y += adder. y; return *this;}

inline TPoint& TPoint: operator -= (const TPoint& subber)

{ x -= subber. x; y -= subber. y; return *this;}

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠŸΡƒΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ объявлСния:

TPoint x (12,3), y (21,30), z (18,30);

Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

x +=y; y-=z; TPoint r = x + z:

ΠžΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° пСрСопрСдСлСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сводятся ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

— Π”вумСстныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, одномСстныС — ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ, Ссли опСрация объявлСна ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° класса, Ρ‚ΠΎ Π½Π΅ΡΠ²Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ являСтся экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ двумСстной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, одномСстная опСрация ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ с ΠΏΡƒΡΡ‚Ρ‹ΠΌ списком ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²). Если опСрация пСрСопрСдСляСтся Π²Π½Π΅ класса (с ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»Π΅ΠΌ friend), Ρ‚ΠΎ Π΄Π»Ρ двумСстной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, для одномСстной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ — ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

— ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ сохраняСтся ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ исходной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚. Π΅. опСрация + Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ = ΠΈ Ρ‚. Π΄.

— ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ся свойства коммутативности ΠΈ Π°ΡΡΡ†ΠΈΠ°Ρ‚ивности, Ρ‚. Π΅. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния Ρ… + y — z ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° выраТСния y — z + x ΠΈ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

— ΠΠ΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. (Ρ‚ΠΎΡ‡ΠΊΠ°), .* (Ρ‚ΠΎΡ‡ΠΊΠ°Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ°, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ класса ΠΈΠ»ΠΈ структуры),: (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ контСкста), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ # ΠΈ ##, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ прСпроцСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

— ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ = (присваиваниС), () (функция), [ ] (индСкс), -> (ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ класса ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ) всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ класса ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ static.

— ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ new ΠΈ delete Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ static — ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ класса.

Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΌ опСрациям ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ Ρ‚рСбования, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊ Ρ„ункциям.

5. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ²

5.1. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ дСйствия для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, сортировка массива ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ Π΅Π³ΠΎ элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Π΄Π»Ρ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° int ΠΈ Π΄Π»Ρ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° double. Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΈΠΏΠ°Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π’ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ вСрсии Π‘++ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ срСдство, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор ΠΌΠΎΠ³ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ строится ΠΏΠΎ ΡΡ…Π΅ΠΌΠ΅:

template < class имя_класса >

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

{ /* Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ */ }

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

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сортировки массива ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ пСрСстановок ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ построСно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

template

void sort (T a[ ], int n)

{ T temp;

int sign;

for (int k = 0; k > n; k++)

{ sign = 0;

for (i = 0; i

if (a [ i ] > a [ i + 1])

{ temp = a [ i ];

a[ i ] = a[ i + 1 ];

a[ i + 1 ] = temp; sign++;

}

if (sign == 0) break;

}

return;

}

Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ массивы

int aint [10];

double afl [20];

ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Ρ‹ значСния элСмСнтов этих массивов, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

sort (aint, 10);

обСспСчит Π²Ρ‹Π·ΠΎΠ² sort для упорядочСния массива Ρ†Π΅Π»Ρ‹Ρ…, Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

sort (afl, 20)

обСспСчит Π²Ρ‹Π·ΠΎΠ² sort для упорядочСния массива с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° double.

Если элСмСнтами массива ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ программистом класса, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° опСрация ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ >, Ρ‚ΠΎ Ρ„ункция sort ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ΠΈ Π΄Π»Ρ Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива. РазумССтся, Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sort. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сокращаСт объСм исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ.

Π’ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»Π΅ template ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²ΠΈΠ΄Π° class имя_Ρ‚ΠΈΠΏΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, функция

template < class T1, class T2 >

void copy (T1 a[ ], T2 b[ ], int n)

{ for (int i = 0; i

a[ i ] = b [ i ] ;

}

ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² массива b Ρ‚ΠΈΠΏΠ° T2 Π² ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² массива a Ρ‚ΠΈΠΏΠ° T1. РазумССтся, программист нСсСт ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

5.2. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ классов

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

template

class описаниС класса Как ΠΈ Π΄Π»Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»Π΅ template ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ ΡΠ°ΠΌΠΎΠΌ описаниС класса ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… функциями.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ описаниС класса stack, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для построСния стСков фиксированного максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

enum BOOLEAN (FALSE, TRUE);

template

class stack

{ private:

enum (EMPTY = -1);

Type* s; /* Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ² стСка */

int max_len; /* Максимальная Π΄Π»ΠΈΠ½Π° стСка */

int top; /* ИндСкс элСмСнта Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка */

public:

stack (): max_len (100) /* конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² */

{ s = new Type [ 100 ]; top = EMPTY; }

stack (int size): max_len (size) /* Π’Ρ‚ΠΎΡ€ΠΎΠΉ конструктор */

{ s = new Type [ size ]; top = EMPTY; }

~stack () { delete [ ] s; } /* ДСструктор */

void reset () { top = EMPTY; } /* ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ стСк */

void push (Type c) { s [ ++top ] = c; }

Type pop () { return (s [top—] }

Type top_of () { return (s [top ] }

BOOLEAN empty () { return BOOLEAN (top == EMPTY) }

BOOLEAN full () { return BOOLEAN (top == max_len) }

};

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΡΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с Ρ†Π΅Π»ΡŒΡŽ сокращСния исходного тСкста Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ стСка Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… push ΠΈ pop.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ имя Ρ‚ΠΈΠΏΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках:

stack < int > stack_of_int (50); /* Π‘Ρ‚Π΅ΠΊ Π½Π° 50 элСмСнтов Ρ‚ΠΈΠΏΠ° int */

stack < myClass > stmc (20); /* Π‘Ρ‚Π΅ΠΊ Π½Π° 20 элСмСнтов Ρ‚ΠΈΠΏΠ° myClass */

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ класса. Когда ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° класса задаСтся Π²Π½Π΅ описания класса, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒΡΡ описатСлСм template. НапримСр, Ссли Π±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ top_of Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π²Π½Π΅ описания класса, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π»ΠΎ Π±Ρ‹ Π²ΠΈΠ΄:

template < class Type >

Type top_of () { return s [ top ]; }

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ спСцифичСскиС Ρ‡Π΅Ρ€Ρ‚Ρ‹ описаний ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… классов.

Если Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ классС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ friend-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° такая функция Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ СдинствСнная friend-функция для всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π° ΠΊΠΎΠ³Π΄Π° friend-функция зависит ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ своя friend-функция для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

Если Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ классС ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ статичСскиС (static) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ‚ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ свой экзСмпляр статичСской ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

6. ΠšΠ»Π°ΡΡΡ‹ для Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

6.1. БистСма классов Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°

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

БистСма классов Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π‘++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… класса: класс ios ΠΈ ΠΊΠ»Π°ΡΡ streambuf.

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

— Π±ΠΈΡ‚Ρ‹ состояния (статуса) ΠΏΠΎΡ‚ΠΎΠΊΠ°

enum io_state { goodbit = 0×00, // Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΡ‚Ρ‹ Π½Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Ρ‹, всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ

eofbit = 0×01, // ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°

failbit = 0×02, // ошибка Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°

badbit = 0×04, // ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ

hardfail = 0×80 // нСисправимая ошибка

};

— Π±ΠΈΡ‚Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΠ° использования ΠΏΠΎΡ‚ΠΎΠΊΠ° (Ρ€Π΅ΠΆΠΈΠΌΠ° Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°)

enum open_mode { in = 0×01, // ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ для чтСния

out = 0×02, // ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ для записи

ate = 0×04, // ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ

app = 0×08, // Ρ€Π΅ΠΆΠΈΠΌ добавлСния Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°

trunc = 0×10, // усСчСниС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°

nocreate = 0×20, // ошибка открытия Ρ„Π°ΠΉΠ»Π°, Ссли ΠΎΠ½ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚

noreplace = 0×40, // ошибка открытия, Ссли Ρ„Π°ΠΉΠ» сущСствуСт

binary = 0×80 // Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ (Π½Π΅ Ρ‚Скстовый) Ρ„Π°ΠΉΠ»

};

— Ρ„Π»Π°Π³ΠΈ направлСния позиционирования Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅

enum seek_dir { beg=0, cur=1, end=2 };

— Ρ„Π»Π°Π³ΠΈ — манипуляторы управлСния Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ

enum { skipws = 0×0001, // ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅

left = 0×0002, // Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π»Π΅Π²ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅

right = 0×0004, // Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΠΏΡ€Π°Π²ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅

internal = 0×0008, // ΠΏΡ€ΠΎΠ±Π΅Π» послС Π·Π½Π°ΠΊΠ° ΠΈΠ»ΠΈ основания систСмы счислСния

dec = 0×0010, // ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΄Π΅ΡΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ систСму счислСния

oct = 0×0020, // ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΡƒΡŽ систСму счислСния

hex = 0×0040, // ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

showbase = 0×0080, // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ систСмы счислСния ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅

showpoint = 0×0100, // ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π΅ΡΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅

//(Π² Ρ‡ΠΈΡΠ»Π°Ρ… с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ)

uppercase = 0×0200, // прописныС Π±ΡƒΠΊΠ²Ρ‹ ΠΏΡ€ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄Π΅

showpos = 0×0400, // Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ '+' для ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ…

scientific= 0×0800, // ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Π²ΠΈΠ΄Π° 1.2345E2

fixed = 0×1000, // ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Π²ΠΈΠ΄Π° 123.45

unitbuf = 0×2000, // ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ послС вставки Π² ΠΏΠΎΡ‚ΠΎΠΊ

stdio = 0×4000, // ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ stdout, stderr послС вставки Π² ΠΏΠΎΡ‚ΠΎΠΊ

boolalpha = 0×8000 // Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ/ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π±ΡƒΠ»Π΅Π²Ρ‹ ΠΊΠ°ΠΊ тСкст ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹

};

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти пСрСчислимыС константы ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса ios, для доступа ΠΊ Π½ΠΈΠΌ трСбуСтся ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ контСкста, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ios: in.

Класс streambuf обСспСчиваСт созданиС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-Π΄Π°Π½Π½Ρ‹Π΅ для управлСния Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² Π±ΡƒΡ„Π΅Ρ€Π΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса ios содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ²ΡΠ·Π°Π½Π½Ρ‹ΠΉ с Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ streambuf.

ΠšΠ»Π°ΡΡΡ‹ istream ΠΈ ostream ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° ios, Π² Π½ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ Π²Π²ΠΎΠ΄ (istream) ΠΈ Π²Ρ‹Π²ΠΎΠ΄ (ostream) Π΄Π°Π½Π½Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΡΡ‚Ρ€ΠΎΠΊ.

Π’ ΠΊΠ»Π°ΡΡΠ΅ istream ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ бСсформатного Π²Π²ΠΎΠ΄Π° (Π±Π΅Π· прСобразования Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…) ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ· Π²Π½Π΅ΡˆΠ½Π΅Π³ΠΎ прСдставлСния Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ get () Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° char Π² ΠΌΠ°ΡΡΠΈΠ², опрСдСляСмый ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π·Π°Π΄Π°Π΅Ρ‚ максимальноС число Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов (l), Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ устанавливаСт символ-ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄. Π—Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ символом Π² ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ символ `'.

istream _FAR & _RTLENTRY get (char _FAR *, int l, char = 'n');

istream _FAR & _RTLENTRY get (signed char _FAR *, int l, char = 'n');

istream _FAR & _RTLENTRY get (unsigned char _FAR *, int l, char ='n');

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ read () Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π·Π°Π½Π΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ числа символов

istream _FAR & _RTLENTRY read (char _FAR *, int l);

istream _FAR & _RTLENTRY read (signed char _FAR *, int l);

istream _FAR & _RTLENTRY read (unsigned char _FAR *, int l);

Для Π²Π²ΠΎΠ΄Π° строки, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ символом-ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΌ, слуТит функция getline () ΠΏΡ€ΠΈ этом символ-ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ заносится Π² ΠΌΠ°ΡΡΠΈΠ²

istream _FAR & _RTLENTRY getline (char _FAR *, int, char = 'n');

istream _FAR & _RTLENTRY getline (signed char _FAR *, int, char= 'n');

istream _FAR & _RTLENTRY getline (unsigned char _FAR *, int, char= 'n');

Для извлСчСния ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° char Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°-ограничитСля слуТит Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ get ():

istream _FAR & _RTLENTRY get (streambuf _FAR &, char = 'n');

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ get () ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа

istream _FAR & _RTLENTRY get (char _FAR &);

istream _FAR & _RTLENTRY get (signed char _FAR &);

istream _FAR & _RTLENTRY get (unsigned char _FAR &);

int _RTLENTRY get (); // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символа

int _RTLENTRY peek (); // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ Π±Π΅Π· удалСния Π΅Π³ΠΎ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°

int _RTLENTRY gcount (); // число символов, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°

// Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ символа Π² ΠΏΠΎΡ‚ΠΎΠΊ Π²Π²ΠΎΠ΄Π°

istream _FAR & _RTLENTRY putback (char);

ΠŸΡ€ΠΎΠΏΡƒΡΠΊ символов с ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŽ выполняСт функция

istream _FAR & _RTLENTRY ignore (int = 1, int = EOF);

Π€ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄ рСлизуСтся Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ пСрСопрСдСлСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°

istream _FAR & _RTLENTRY operator>> (bool _FAR &);

istream _FAR & _RTLENTRY operator>>

(istream _FAR & (_RTLENTRY *_f)(istream _FAR &));

istream _FAR & _RTLENTRY operator>>

(ios _FAR & (_RTLENTRY *_f)(ios _FAR &));

istream _FAR & _RTLENTRY operator>> (char _FAR *);

istream _FAR & _RTLENTRY operator>> (signed char _FAR *);

istream _FAR & _RTLENTRY operator>> (unsigned char _FAR *);

istream _FAR & _RTLENTRY operator>> (char _FAR &);

istream _FAR & _RTLENTRY operator>> (signed char _FAR &);

istream _FAR & _RTLENTRY operator>> (unsigned char _FAR &);

istream _FAR & _RTLENTRY operator>> (short _FAR &);

istream _FAR & _RTLENTRY operator>> (int _FAR &);

istream _FAR & _RTLENTRY operator>> (long _FAR &);

istream _FAR & _RTLENTRY operator>> (unsigned short _FAR &);

istream _FAR & _RTLENTRY operator>> (unsigned int _FAR &);

istream _FAR & _RTLENTRY operator>> (unsigned long _FAR &);

istream _FAR & _RTLENTRY operator>> (float _FAR &);

istream _FAR & _RTLENTRY operator>> (double _FAR &);

istream _FAR & _RTLENTRY operator>> (long double _FAR &);

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· istream ΠΈ Π²ΡΡ‚Π°Π²ΠΊΠ° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° streambuf выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-функция

istream _FAR & _RTLENTRY operator>> (streambuf _FAR *);

ΠœΠ°ΠΊΡ€ΠΎΡ FAR управляСт способом прСдставлСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, макрос RTLENTRY опрСдСляСт ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ стандартной Π±ΠΈΠ»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

АналогичныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΊΠ»Π°ΡΡΠ΅ ostream:

// Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ символ Π² ΠΏΠΎΡ‚ΠΎΠΊ

ostream _FAR & _RTLENTRY put (char);

ostream _FAR & _RTLENTRY put (signed char);

ostream _FAR & _RTLENTRY put (unsigned char);

// Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΠΎΡ‚ΠΎΠΊ строку

ostream _FAR & _RTLENTRY write (const char _FAR *, int l);

ostream _FAR & _RTLENTRY write (const signed char _FAR *, int l);

ostream _FAR & _RTLENTRY write (const unsigned char _FAR *, int l);

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ»Π°

Π’Ρ‹Π²ΠΎΠ΄ «true» ΠΈΠ»ΠΈ «false» для Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° bool

ostream _FAR & _RTLENTRY ostream: operator<< (bool);

Π’Ρ‹Π²ΠΎΠ΄ Π»Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° char

ostream _FAR & _RTLENTRY operator<< (char);

ostream _FAR & _RTLENTRY operator<< (signed char);

ostream _FAR & _RTLENTRY operator<< (unsigned char);

Π’Ρ‹Π²ΠΎΠ΄ числовых Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΎ Π²Π½Π΅ΡˆΠ½Π΅Π΅ прСдставлСниС

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ