void f(complex a, complex b) (* complex c = a + b; // ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ complex d = operator+(a,b); // ΡΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² *)
ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ complex ΠΎΠ±Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΡΠΎΡΠ° ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠ°ΠΌΠΈ.
6.2.1 ΠΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΈ Π£Π½Π°ΡΠ½ΡΠ΅ ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ
ΠΠΈΠ½Π°ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»Π΅Π½, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΡΡΠ³, ΠΏΠΎΠ»ΡΡΡΡΠ°Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΡΠΈΠΈ @ [email protected] ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ [email protected](bb), ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ [email protected](aa,bb). ΠΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΎΠ±Π΅, ΡΠΎ [email protected] ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. Π£Π½Π°ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΏΡΠ΅ΡΠΈΠΊΡΠ½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΈΠΊΡΠ½Π°Ρ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»Π΅Π½, Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΡΡΠ³, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ ΡΠ½Π°ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ @ aa @ ΠΈΠ»ΠΈ @aa ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ [email protected](), ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ [email protected](aa). ΠΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈ ΡΠΎ, ΠΈ Π΄ΡΡΠ³ΠΎΠ΅, ΡΠΎ ΠΈ [email protected], ΠΈ @aa ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ:
class X (* // Π΄ΡΡΠ·ΡΡ
friend X operator-(X); // ΡΠ½Π°ΡΠ½ΡΠΉ ΠΌΠΈΠ½ΡΡ friend X operator-(X,X); // Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΌΠΈΠ½ΡΡ friend X operator-(); // ΠΎΡΠΈΠ±ΠΊΠ°: Π½Π΅Ρ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ²
friend X operator-(X,X,X); // ΠΎΡΠΈΠ±ΠΊΠ°: ΡΠ΅ΡΠ½Π°ΡΠ½Π°Ρ
// ΡΠ»Π΅Π½Ρ (Ρ Π½Π΅ΡΠ²Π½ΡΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ: this)
X* operator amp;(); // ΡΠ½Π°ΡΠ½ΠΎΠ΅ amp; (Π²Π·ΡΡΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ°) X operator amp;(X); // Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ amp; (ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π) X operator amp;(X,X); // ΠΎΡΠΈΠ±ΠΊΠ°: ΡΠ΅ΡΠ½Π°ΡΠ½ΠΎΠ΅
*);
ΠΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ++ ΠΈ β ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Ρ, ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΡΡΠΈΠΊΡΠ½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
6.2.2 ΠΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π‘ΠΌΡΡΠ» ΠΠΏΠ΅ΡΠ°ΡΠΈΠΉ
ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΌΡΡΠ»Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ»Π΅ΠΌ, Π½Π΅ Π΄Π΅Π»Π°Π΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΠΊΡ Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ΅ = ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π΅Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ, Π½Π΅ Π΄Π΅Π»Π°Π΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ lvalue (#Ρ.6).
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΊΠ°ΠΊ ΡΠ°Π²Π½ΠΎΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠΌ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΡΠΌΠΈ ΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ a ΡΠ²Π»ΡΠ΅ΡΡΡ int, ΡΠΎ ++a ΠΎΠ½Π°ΡΠ°Π΅Ρ a+=1, ΡΡΠΎ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ a=a+1. Π’Π°ΠΊΠΈΠ΅ ΡΠΎΠΎΡΠ½ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΠ°ΠΊ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ» ΠΈΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ operator+= () Π΄Π»Ρ ΡΠΏΠ° complex Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ complex::operator+() ΠΈ complex::operator=().
ΠΠΎ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ = ΠΈ amp; ΠΈΠΌΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ ΡΠΌΡΡΠ» Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΠ±Π° Β«Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡΒ» ΡΡΠΈ Π΄Π²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΡ ΠΌΠΎΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅Π΄Π΅Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° X. ΠΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΠΈΡΠ°ΡΡ X::operator amp;(), Π½Π΅ Π·Π°Π΄Π°Π² Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π±ΡΠ΄Π΅Ρ Π±ΡΠ°ΡΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° X, ΡΠΎ ΠΊΠΎΠΌΠΏΠ½ΠΎΠ²ΡΠΈΠΊ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ*. ΠΠ»ΠΈ, Π΄ΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ X::operator amp;() ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π»Π° ΠΎΡΠΈΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
____________________ * Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Β«ΡΠΌΠ΅Π½Β», ΡΡΠΎ ΡΡΠ³Π°Π΅ΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ. Π ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅Π»ΡΠ·Ρ. (ΠΏΡΠΈΠΌ Π°ΡΠΎΡΠ°)
6.2.3 ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π’ΠΈΠΏΡ
Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ»ΠΈ Π±ΡΡΡ ΡΠ»Π΅Π½ΠΎΠΌ, ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° (ΡΡΠ½ΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ new ΠΈ delete, ΡΡΠΎ Π΄Π»Π°ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ). ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²ΡΠ΅Π»Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΌΡΡΠ» Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ Π² ΡΠ΅Π±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠΈΠΏΠ°. Π ΡΠ°ΡΠ½ΠΎΡΡΠΈ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΈΡΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΡΠΈΠΏ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ»Π΅Π½ΠΎΠΌ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ aa Ρ ΡΠ΅Π»ΡΠΌ 2: aa+2, ΠΏΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π½Π΅, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ aa.operator+(2), Π½ΠΎ Ρ 2+aa ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° int, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ + ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π»ΠΎ 2.operator+(aa). ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π±Ρ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Π±ΡΠ», ΡΠΎ Π΄Π»Ρ
ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ 2+aa ΠΈ aa+2, ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ Π±Ρ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π΅Π½Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ Π·Π½Π°Π΅Ρ ΡΠΌΡΡΠ»Π° +, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ ΠΊΠΎΠΌΠΌΡΡΠ°ΡΠΈΠ²Π΅Π½, ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ 2+aa ΠΊΠ°ΠΊ aa+2. Π‘ ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΌΠΎΠ³ΡΡ Π»Π΅Π³ΠΊΠΎ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΡΡΠ·ΡΡ.
ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Ρ. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΌΡΡΠ» ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π²ΡΡΡΠΎΠ΅Π½ΠΎΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠΏΡΠ°ΡΠΈΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π΅ΡΠ»ΠΈ Π² ΡΠΈΠΏΠ°Ρ ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈΠΌΠ΅ΡΡΡΡ ΠΎΡΠ»ΠΈΡΠΈΡ, ΡΠ°Π·Π»ΠΈΡΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΌΠΎΠ³ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΠΈΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ (ΡΠΌ. #4.6.7).
6.3 ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π’ΠΈΠΏΠ°
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΡ ΡΠΈΡΠ΅Π» ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π°, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° ΡΡΡΡΠΎΠΈΡΡ ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ, ΠΏΠΎΡΠΎΠΌΡ Π΅Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
class complex (* double re, im; public: complex(double r, double i) (* re=r; im=i; *)
friend complex operator+(complex, complex); friend complex operator+(complex, double); friend complex operator+(double, complex);
friend complex operator-(complex, complex); friend complex operator-(complex, double); friend complex operator-(double, complex); complex operator-() // ΡΠ½Π°ΡΠ½ΡΠΉ -
friend complex operator*(complex, complex); friend complex operator*(complex, double); friend complex operator*(double, complex);
// ... *);
Π’Π΅ΠΏΠ΅ΡΡ, ΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ complex, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ:
void f() (* complex a(1,1), b(2,2), c(3,3), d(4,4), e(5,5); a = -b-c; b = c*2.0*c; c = (d+e)*a; *)
ΠΠΎ ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ complex ΠΈ double, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΎΡΡ Π²ΡΡΠ΅ Π΄Π»Ρ operator+(), Π½Π΅Π²ΡΠ½ΠΎΡΠΈΠΌΠΎ Π½ΡΠ΄Π½ΠΎ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠΉ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅ Π΄ΡΠΆΠΈΠ½Ρ ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΡΠΈΠΏ complex, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² Β«complex.hΒ».
6.3.1 ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ (ΠΏΠ΅ΡΠ΅Π³ΡΠΆΠ΅Π½Π½ΡΡ ) ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΌΡ double ΡΠΎΠ·Π΄Π°Π΅Ρ complex. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
class complex (* // ... complex(double r) (* re=r; im=0; *) *);
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΡΡΠ΅Π±ΡΡΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π½Π΅ΠΎΠ±ΡΠ·ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ²Π½ΠΎ:
complex z1 = complex(23); complex z2 = 23;
Π z1, ΠΈ z2 Π±ΡΠ΄ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ complex(23).
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ β ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΈΡΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°, ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ, ΡΠΎΠ³Π΄Π°, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ»Π°ΡΡ complex ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ:
class complex (* double re, im; public: complex(double r, double i = 0) (* re=r; im=i; *)
friend complex operator+(complex, complex); friend complex operator*(complex, complex); *);
ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²Ρ ΠΎΠ΄ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ complex ΠΈ ΡΠ΅Π»ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΡΡΠ°Π»ΠΈ Π±Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ. Π¦Π΅Π»Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ complex Ρ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΠΌΠ½ΠΈΠΌΠΎΠΉ ΡΠ°ΡΡΡΡ. ΠΠ°ΡΠΈΠΌΠ΅Ρ, a=b*2 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ:
a=operator*( b, complex( double(2), double(0) ) )
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ.
ΠΠ±ΡΠ΅ΠΊΡ, ΡΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΈΡΡΠΆΠ΅Π½ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½.
6.3.2 ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΌ, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ·Π°ΡΡΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ:
1. ΠΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠΈΠΏΠ° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΏ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠ½ΠΎΠ½ΡΠ΅ ΡΠΈΠΏΡ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ)
2. ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π² ΡΡΠ°ΡΡΠΉ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ°ΡΠΎΠ³ΠΎ
3. ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, Π½Π΅ ΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Π° Ρ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ Π΄Π²ΡΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² Π΄Π»Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ»Π΅Π½ X::operator T(), Π³Π΄Π΅ T β ΠΈΠΌΡ ΡΠΏΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· X Π² T. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΄Π΅Π»ΠΈΡΡ ΡΠΈΠΏ tiny (ΠΊΡΠΎΡΠ΅ΡΠ½ΡΠΉ), ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0...63, Π½ΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠΎΡΡΠ°ΡΡΡΡ Π² ΡΠ΅Π»ΡΠΌΠΈ Π² Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ :
class tiny (* char v; int assign(int i) (*return v=(i amp;~63) ? (error(Β«ΠΎΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Β»),0):i;*) public: tiny(int i) (* assign(i); *) tiny(tiny amp; i) (* v = t.v; *) int operator=(tiny amp; i) (* return v = t.v; *) int operator=(int i) (* return assign(i); *) operator int() (* return v; *) *)
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π°, ΠΊΠΎΠ³Π΄Π° tiny ΠΈΠ½ΠΈΡΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ int, ΠΈ Π²ΡΠ΅Π³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΅ΠΌΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ int. ΠΠ΄Π½ΠΎ tiny ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ΠΎΠΌΡ Π±Π΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π§ΡΠ±Ρ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π°Π΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ tiny ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΠ΅Π»ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ tiny::operator int(), Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· tiny Π² int. ΠΡΠ΅Π³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² ΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π³Π΄Π΅ ΡΡΠ΅Π±Π΅ΡΡΡ int, ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ tiny, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π΅ΠΌΡ int. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
void main() (* tiny c1 = 2; tiny c2 = 62; tiny c3 = c2 β c1; // c3 = 60 tiny c4 = c3; // Π½Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°) int i = c1 + c2; // i = 64 c1 = c2 + 2 * c1; // ΠΎΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°: c1 = 0 (Π° Π½Π΅ 66) c2 = c1 -i; // ΠΎΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°: c2 = 0 c3 = c2; // Π½Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°) *)
Π’ΠΈΠΏ Π²Π΅ΠΊΡΠΎΡ ΠΈΠ· tiny ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ, ΠΏΠΎΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΡ ΡΠΈΠΏ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΌ Π² ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π½ΠΈΡ.
ΠΡΡΠ³ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ β ΡΡΠΎ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΡΠ΅Π» (Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ 100, Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ°, Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ° Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ, Π΄Π²ΠΎΠΈΡΠ½ΠΎ-Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ.ΠΏ.). ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊ + ΠΈ *.