// ΡΡΡΠΎΠΊΠΈ-ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ
Π Π½ΠΎΡΠ°ΡΠΈΠΈ UML ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π Π°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΌ, ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ.
ΠΠ°ΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΏΡΠΎΡΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΄Π½Π΅Π΅ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½ΡΡ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ΄Π°ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ. ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ β ΠΏΠΎΡΡΠΈ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π½Π°ΠΉΠ΄Π΅ΡΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΌ. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΡΠΎ ΡΠ°ΠΌΡΠΉ ΡΡΠ½ΡΠΉ, ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π»Ρ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΡΠ°Π·ΡΠΌΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΈ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ Π±ΠΎΠΉΡΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ. ΠΡΠΎΡΡΠΎ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎ, ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±Π΄ΡΠΌΠ°Π² Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ.
Π§ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡβ’ ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ. ΠΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅.
β’ Π¦Π΅Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ β Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°ΡΡΠ°ΡΡ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π΅Π³ΠΎ ΡΠ°Π·ΡΠΌΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΄Π°Π½Π½ΡΡ .
β’ ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ Π·Π°ΠΊΠΎΠ½Π½ΠΎ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠ΅Π³ΠΎ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ»Π°Π²Π° 7
Π¨Π°Π±Π»ΠΎΠ½Ρ ΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ Π² C++ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΠΏΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ: vector, list, map ΠΈ ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΡΠ° ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ ΡΡΠ°Π»ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΈ Π½ΠΎΠ²ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π±ΡΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΈ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅, Π½ΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, Π½Π΅ Π·Π°Π²ΠΈΡΡΡΠΈΠΉ ΠΎΡ ΡΠΈΠΏΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ½ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΠ΅Ρ, β ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π΅ΡΠ΅ Π»ΡΡΡΠ΅. ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ STL, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ for_each, find ΠΈ merge. Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ Π²ΡΡΡΠ½ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² C++ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ Π’ΡΡΡΠΈΠ½Π³Π°: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π»ΡΠ±ΡΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²: ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C++ ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π Π½Π°ΡΠΈ Π΄Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ β ΡΡΠΎ Π»ΠΈΡΡ ΠΌΠ°Π»Π°Ρ ΡΠΎΠ»ΠΈΠΊΠ° ΡΠΎΠ³ΠΎ, Π½Π° ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ C++. ΠΠΎ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π»Π΅ΠΆΠΈΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±Π°Π·ΠΎΠ²ΡΡ ΠΈΠ΄Π΅ΠΉ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌ ΠΈ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° Π½Π°ΡΡΠΎΡΡΠ°Ρ Π³Π»Π°Π²Π°.
Π― Π½Π΅ ΡΡΠ°Π²Π»Ρ ΡΠ΅Π±Π΅ ΡΠ΅Π»ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ· Π²Π°Ρ ΡΠΊΡΠΏΠ΅ΡΡΠ° ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², Π½ΠΎ, ΠΏΡΠΎΡΠΈΡΠ°Π² ΡΡΡ Π³Π»Π°Π²Ρ, Π²Ρ ΡΡΠ°Π½Π΅ΡΠ΅ Π»ΡΡΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π² ΡΡΠΎΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅. Π ΡΠΎΠΌΡ ΠΆΠ΅ Π² Π½Π΅ΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π·Π΄Π²ΠΈΠ½ΡΡΡ Π³ΡΠ°Π½ΠΈΡΡ Π²Π°ΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² β Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠΎΠΊΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΡΠ΅.
ΠΡΠ°Π²ΠΈΠ»ΠΎ 41: Π Π°Π·Π±Π΅ΡΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
Π ΠΌΠΈΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΡΠ²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ (Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΠΉ) ΠΊΠ»Π°ΡΡ:
class Widget {
public:
Widget();
virtual ~Widget();
virtual std::size_t size() const;
virtual void normalize();
void swap(Widget& other); // ΡΠΌ. ΠΏΡΠ°Π²ΠΈΠ»ΠΎ 25
...
};
ΠΈ ΡΡΠΎΠ»Ρ ΠΆΠ΅ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
void doProcessing(Widget& w)
{
if(w.size() > 10 && w != someNastyWidget) {
Widget temp(w);
temp.normalize();
temp.swap(w);
}
}
ΠΠΎΡ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ w Π² ΡΡΠ½ΠΊΡΠΈΠΈ doProcessing:
β’ ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ w ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Widget, ΡΠΎ w Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Widget. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡΠΈ ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π΄Π»Ρ Widget), ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π°Π·ΡΠ²Π°Ρ Π΅Π³ΠΎ ΡΠ²Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ β ΡΠ²Π½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠΈΠΌ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
β’ ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ² Widget ΡΠ²Π»ΡΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ, ΡΠΎ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ w ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ: ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° w (ΡΠΌ. ΠΏΡΠ°Π²ΠΈΠ»ΠΎ 37).
ΠΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ. Π ΡΡΠΎΠΌ ΠΌΠΈΡΠ΅ ΡΠ²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½Ρ. ΠΠΌΠ΅ΡΡΠΎ Π½ΠΈΡ Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½ Π²ΡΡ ΠΎΠ΄ΡΡ Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ doProcessing Π² ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ:
template<typename T>
void doProcessing(T& w)
{
if(w.size() > 10 && w != someNastyWidget) {
T temp(w);
temp.normalize();
temp.swap(w);
}
}
Π§ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ w Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ doProcessing?
β’ Π’Π΅ΠΏΠ΅ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ w, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌΠΈ Π½Π°Π΄ w Π² ΡΠ°Π±Π»ΠΎΠ½Π΅. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΈΠΏ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ w (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ T) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ size, normalize ΠΈ swap; ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ temp), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π½Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ (Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ someNastyWidget). Π‘ΠΊΠΎΡΠΎ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΎΡΠ½ΠΎ, Π½ΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΠ°ΠΆΠ½ΠΎ, ΡΡΠΎ Π½Π°Π±ΠΎΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π΅ΡΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΠΏ T Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ.
β’ ΠΠ»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ°ΡΡΠ²ΡΠ΅Ρ w, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ operator> ΠΈ operator!=, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½. Π’Π°ΠΊΠ°Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π²ΡΠ·ΠΎΠ²Ρ ΡΠ°Π·Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ ΡΡΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ, ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²Π°ΠΌ Π·Π½Π°ΠΊΠΎΠΌΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡΡ ΠΈΠ· ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΠ·ΡΠ²Π°ΡΡ (ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ) ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ (ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ). ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²Π½ΡΠΌΠΈ ΠΈ Π½Π΅ΡΠ²Π½ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ β ΠΏΠΎΠ½ΡΡΠΈΠ΅, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π½Π° Π½Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.
Π―Π²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΡΠΈΠ³Π½Π°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΎ Π΅ΡΡΡ ΠΈΠΌΠ΅Π½ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΈΠΏΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Ρ. Π΄. Π’Π°ΠΊ, ΠΎΡΠΊΡΡΡΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠ»Π°ΡΡΠ° Widget
class Widget {
public:
Widget();
virtual ~Widget();
virtual std::size_t size() const;
virtual void normalize();
void swap(Widget& other);
};
ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ size, normalize ΠΈ swap Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΡΡΠΈ (ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ β ΡΠΌ. ΠΏΡΠ°Π²ΠΈΠ»ΠΎ 5). Π ΡΠΎΡΡΠ°Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΌΠΎΠ³ΡΡ Π²Ρ ΠΎΠ΄ΠΈΡΡ ΡΠ°ΠΊΠΆΠ΅ typedefbi.
ΠΠ΅ΡΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ. ΠΠ½ Π½Π΅ Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΈΠ³Π½Π°ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π΅ΡΠ΅ ΡΠ°Π· Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΡ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π±Π»ΠΎΠ½Π° doProcessing:
template<typename T>
void doProcessing(T& w)
{
if(w.size() > 10 && w != someNastyWidget) {
...
ΠΠ΅ΡΠ²Π½ΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ T (ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ w) ΠΏΡΠΈΡΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:
β’ ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ size, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π»ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
β’ ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ operator!=, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° T. (ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ someNastyWidget ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ T.)
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΡΡ Π² ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠ°, T Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ size, Ρ ΠΎΡΡ ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π° ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ. ΠΠ½Π° Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΠΏ. ΠΠΎΠΎΠ±ΡΠ΅-ΡΠΎ ΠΎΠ½Π° Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΈΠΏ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ operator>! ΠΡΠΆΠ½ΠΎ Π»ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° X, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½ operator>, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ° X ΠΈ int (ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ 10 ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int). ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ operator> ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ X; Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Y ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ ΠΊ ΡΠΈΠΏΡ X!
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠΈΠΏ T ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π» operator!=, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ operator!= ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π»Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° X ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Y. ΠΡΠ»ΠΈ T ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² X, Π° someNastyWidget Π² Y, ΡΠΎ Π²ΡΠ·ΠΎΠ² operator!= Π±ΡΠ΄Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ.