Π ΡΡΡΠΎΠΊΠ°Ρ 61β68 ΠΈ 71β78 ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ([]) Π·Π°ΠΌΠ΅ΡΠ΅Π½Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π²Π½Π΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ xBoundary Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΊΠ»Π°ΡΡΠ° xBoundary ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft ΡΡΠ΅Π±ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π»ΠΎΡΡ ΡΡΡΠΎΠΊΠΎΠΉ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ return, ΡΠΎΠ³Π»Π°ΡΡΡΡΠ΅ΠΉΡΡ ΠΏΠΎ ΡΠΈΠΏΡ Ρ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅), Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π² ΡΡΡΠΎΠΊΠ΅ 66 Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ ΡΡΡΠΎΠΊΠΈ 67. ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ ΡΡΠΆΠ΄Ρ Π΄Π°ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft!
Π ΡΡΡΠΎΠΊΠ΅ 90 ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ try Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π±Π»ΠΎΠΊ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΡΡΠΎΠΊΠ΅ 97. ΠΠ½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² ΠΌΠ°ΡΡΠΈΠ², ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ Π² ΡΡΡΠΎΠΊΠ΅ 89, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ 101 ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
Π ΡΡΡΠΎΠΊΠ΅ 98 ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π±Π»ΠΎΠΊ catch Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠ° xBoundary.
Π ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π² ΡΡΡΠΎΠΊΠ°Ρ 87β104 ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π±Π»ΠΎΠΊ try, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅Π½ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ j (ΡΡΡΠΎΠΊΠ° 92) ΡΠ²Π΅Π»ΠΈΡΠΈΡΡΡ Π΄ΠΎ 20, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ»Π΅Π½Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ 20. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π² ΡΡΡΠΎΠΊΠ΅ 64, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ Π·Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ operator[] Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° xBoundary (ΡΡΡΠΎΠΊΠ° 66).
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊ Π±Π»ΠΎΠΊΡ catch Π² ΡΡΡΠΎΠΊΠ΅ 98, ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ catch Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΡΡΠΎΠΊΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ . ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° Π±Π»ΠΎΠΊΠ° catch Π² ΡΡΡΠΎΠΊΠ΅ 100.
ΠΠ»ΠΎΠΊ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ
ΠΡΠΎΡ Π±Π»ΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ try, 3a ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ°Ρ ΡΠΈΠ³ΡΡΠ½Π°Ρ ΡΠΊΠΎΠ±ΠΊΠ°; Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π±Π»ΠΎΠΊ Π·Π°ΠΊΡΡΠ²Π°Ρ- ΡΠ΅ΠΉ ΡΠΈΠ³ΡΡΠ½ΠΎΠΉ ΡΠΊΠΎΠ±ΠΊΠΎΠΉ. ΠΡΠΈΠΌΠ΅Ρ:
try
{
Function();
}
ΠΠ»ΠΎΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ
ΠΡΠΎΡ Π±Π»ΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΏΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΡΡΠΎΠΊ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ catch, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΈΠΏ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π·Π°Π΄Π°Π½Π½ΡΠΉ Π² ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ . ΠΠ°ΡΠ΅ΠΌ ΠΈΠ΄Π΅Ρ ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ°Ρ ΡΠΈΠ³ΡΡΠ½Π°Ρ ΡΠΊΠΎΠ±ΠΊΠ°. ΠΠ°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π±Π»ΠΎΠΊ-catch Π·Π°ΠΊΡΡΠ²Π°ΡΡΠ΅ΠΉ ΡΠΈΠ³ΡΡΠ½ΠΎΠΉ ΡΠΊΠΎΠ±ΠΊΠΎΠΉ.
ΠΡΠΈΠΌΠ΅Ρ:
try
{
Function();
}
catch (OutOfMemory)
{
// Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π΄Π΅ΡΡΠ²ΠΈΠ΅
}
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² try ΠΈ catch
Π§Π°ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΠΈΡΡ, ΠΊΡΠ΄Π° ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈ try, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, Π³Π΄Π΅ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΏΠ°ΠΌΡΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ, Π½ΠΎ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° try Π²ΡΡΡΠ½ΠΈΡΠ΅, Π³Π΄Π΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ°Ρ , ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π·Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΏΡΠ΅Π΄Π΅Π»Ρ, Π²Π²ΠΎΠ΄ΠΎΠΌ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡ., Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ.
ΠΠ΅ΡΠ΅Ρ Π²Π°Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ΠΠ΅ΡΠ΅Ρ Π²Π°Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠΎΠ³Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
Π‘ΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ main() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Animal::GetFavoriteFood(), Π° ΡΡΠ½ΠΊΡΠΈΡ GetFavoriteFood() β ΡΡΠ½ΠΊΡΠΈΡ Animal::LookupPreferences(), ΠΊΠΎΡΠΎΡΠ°Ρ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ fstream::operator>>(), ΡΠΎ Π²ΡΠ΅ ΡΡΠΈ Π²ΡΠ·ΠΎΠ²Ρ Π·Π°Π½ΠΎΡΡΡΡΡ Π² ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ². Π Π΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π² ΡΡΠ΅ΠΊΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·.
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°Π·ΡΡΡΠ°ΡΡΡΡ.
ΠΠ° ΠΊΠ°ΠΆΠ΄ΡΠΌ Π±Π»ΠΎΠΊΠΎΠΌ try ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π»ΠΎΠΊΠΎΠ² catch. ΠΡΠ»ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² catch, ΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ Π±Π»ΠΎΠΊΠ° ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² catch, ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ.
ΠΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΉΠ΄Π΅Ρ Π²Π΅ΡΡ ΠΏΡΡΡ ΠΊ Π½Π°ΡΠ°Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΡΠ½ΠΊΡΠΈΠΈ main()) ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ Ρ ΠΏΠΎΠ΅Π·Π΄ΠΊΠΎΠΉ ΠΏΠΎ ΡΠ»ΠΈΡΠ΅ Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°Π·ΡΡΡΠ°ΡΡΡΡ. ΠΠ°Π·Π°Π΄ Π΄ΠΎΡΠΎΠ³ΠΈ Π½Π΅Ρ. ΠΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠ»Π΅ Π±Π»ΠΎΠΊΠ° catch, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΠ» ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅20.1 Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠΈ 101 β ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΡΠ»Π΅ Π±Π»ΠΎΠΊΠ° try catch, ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΠ²ΡΠ΅Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ xBoundary. ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π±Π»ΠΎΠΊΠ° catch, Π° Π½Π΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°, Π³Π΄Π΅ ΠΎΠ½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π°.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² catch
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² catch, ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ switch. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° default Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ catch(.,,), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΠΊ "ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΡΡ Π²ΡΠ΅". ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 20.2.
ΠΠΈΡΡΠΈΠ½Π³ 20.2. ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
1: #include <iostream.h>
2:
3: const int DefaultSize = 10;
4:
5: class Array
6: {
7: public:
8: // ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ
9: Array(int itsSize = DefaultSize);
10: Array(const Array &rhs);
11: ~Array() { delete [] pType;}
12:
13: // ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
14: Array& operator=(const Array&);
15: int& operator[](int offSet);
16: const int& operator[](int offSet) const;
17:
18: // ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ°
19: int GetitsSize() const { return itsSize; }
20:
21: //ΡΡΠ½ΠΊΡΠΈΡ-Π΄ΡΡΠ³
22: friend ostream& operator<< (ostream&, const Array&);
23:
24: // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
25: class xBoundary { } ;
26: class xTooBig { } ;
27: class xTooSmall { } ;
28: class xZero { } ;
29: class xNegative { } ;
30: private:
31: int *pType;
32: int itsSize;
33: };
34:
35: int& Array::operator[](int offSet)
36: {
37: int size = GetitsSize();
38: if (offSet >= 0J,& offSet < GetitsSize())
39: return pType[offSet];
40: throw xBoundary();
41: return pType[0]; // ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
42: }
43:
44:
45: const int& Array::operator[](int offSet) const
46: {
47: int mysize = GetitsSize();
48: if (offSet >= 0 && offSet < GetitsSize())
49: return pType[offSet]
50: throw xBoundary();
51:
52: return pType[0]; // ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
53: }
54:
55:
56: Array::Array(int size):
57: itsSize(size)
58: {
59: if (size == 0)
60: throw xZero();
61: if (size < 10)
62: throw xTooSmall();
63: if (size > 30000)
64: throw xTooBig();
65: if (size < 1)
66: throw xNegative();
67:
68: pType = new int[size];
69: for (int i = 0; i<size: i++)
70: pType[i] = 0;
71: }
72:
73:
74:
75: int main()
76: {
77:
78: try
79: {
80: Array intArray(0);
81: for (int j = 0; j< 100; j++)
82: {
83: intArray[j] = ];
84: cout << "intArray[" << j << "] okay...\n";
85: }
86: }
87: catch (Array::xBoundary)
88: {
89: cout << "Unable to process your input!\n";
90: }
91: catch (Array::xTooBig)
92: {
93: cout << "This array is too big...\n";
94: }
95: catch (Array::xTooSmall)
96: {
97: cout << "This array is too small...\n";
98: }
99: catch (Array::xZero)
100: {
101: cout << "You asked for an array";
102: cout << " of zero objects!\n";
103: }
104: catch (... )
105: {
106: cout << "Something went wrong!\n";
107: }
108: cout << "Done.\n";
109: return 0;
110: }
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
You asked for an array of zero objects!
Done
ΠΠ½Π°Π»ΠΈΠ·: Π ΡΡΡΠΎΠΊΠ°Ρ 26β29 ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΡΡΠ΅ Π½ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠ°: xTooBig, xTooSmall, xZero ΠΈ xNegative. Π ΡΡΡΠΎΠΊΠ°Ρ 56β71 ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ. ΠΡΠ»ΠΈ ΠΎΠ½ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊ ΠΈΠ»ΠΈ ΠΌΠ°Π», Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ Π½ΡΠ»Π΅Π²ΠΎΠΉ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ° Π±Π»ΠΎΠΊΠΎΠΌ try ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² catch Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΡΠΎΠΌΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΠ°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ catch(. ..) Π² ΡΡΡΠΎΠΊΠ΅ 104.