ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π²ΠΎΡΠ΅Π΄ΡΠ΅Π³ΠΎ Π² ΡΠ°ΠΊΠΎΠΉ Π²ΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ, Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²Π΅ΠΊΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ common, Π½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ½ apple ΠΈΠ»ΠΈ orange? ΠΠ±ΡΡΠ½ΠΎ ΡΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π±ΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΠ»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠΎΡΠΌΠ΅ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ Π² ΡΠ°ΠΌΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ, ΡΡΠΎΠ±Ρ Π²ΠΎ Π²ΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°ΡΡ Π²Π΅ΠΊΡΠΎΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° apple:
class apple_vector : public cvector (* public: apple* amp; elem(int i) (* return (apple* amp;) cvector::elem(i); *) //... *);
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π·Π°ΠΏΠΈΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊ ΡΠΈΠΏΡ (ΡΠΈΠΏ)Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ common* amp; (ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° common), ΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ cvector::elem, Π² apple* amp;. Π’Π°ΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΎΠ·Π΄Π°Π΅Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π½Π΅Π΅ (Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°Π»ΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΡΠΌ. #7.3.5), Π½ΠΎ ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ°ΠΊΠΈΡ , ΠΊΠ°ΠΊ vector(type), Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ implement()) Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠΏΠΈΡ ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±, Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΈΠΏΠ° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π½Π°Ρ ΠΊ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎ-ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ.
1.18 ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΈΠ³ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΠ±ΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΈΠ³ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ shape, Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ β ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ:
class shape (* point center; color col; //... public: void move(point to) (* center=to; draw(); *) point where() (* return center; *) virtual void draw(); virtual void rotate(int); //... *);
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ Π·Π½Π°Ρ ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠΈΠ³ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, move ΠΈ where, ΡΠΎ Π΅ΡΡΡ, Β«ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ½ΡΡΡΒ» ΠΈ Β«Π³Π΄Π΅Β»), ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ. ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ virtual, ΡΠΎ Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
class circle: public shape (* int radius; public: void draw(); void rotatte(int i) (**) //... *);
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ shape_vec β Π²Π΅ΠΊΡΠΎΡ ΡΠΈΠ³ΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ:
for (int i = 0; iΒ«no_of_shapes; i++) shape_vec[i].rotate(45);
ΡΡΠΎΠ±Ρ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ Π²ΡΠ΅ ΡΠΈΠ³ΡΡΡ Π½Π° 45 Π³ΡΠ°Π΄ΡΡΠΎΠ² (ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ)
Π’Π°ΠΊΠΎΠΉ ΡΡΠΈΠ»Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ΅Π΄Ρ ΠΏΠΎ ΡΡΡΠΈ Π΄Π΅Π»Π°, ΡΠΈΠΏΠΈΡΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ β ΡΡΠΎ ΡΠΊΠ½ΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΡΠΎ ΡΡ? Π§ΡΠΎ ΡΡ ΡΠ°ΠΊΠΎΠ΅? ΠΈ ΠΠ΅Π»Π°ΠΉ, ΡΡΠΎ Π½Π°Π΄ΠΎ! Π½Π΅ Π΄Π°Π²Π°Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΈΠΏΠ΅. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡΡΠ½ΠΈΡΡ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π±Ρ ΡΠ°ΠΌΠ°.
ΠΠ»Π°Π²Π° 2
ΠΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΊΡΠ°Ρ Π°.
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ (char, int, float ΠΈ Ρ.Π΄.) ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ· Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² (ΡΡΠ½ΠΊΡΠΈΠΉ, Π²Π΅ΠΊΡΠΎΡΠΎΠ², ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ Ρ.Π΄.). ΠΠΌΡ Π²Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°Π΄Π°Π΅Ρ Π΅Π³ΠΎ ΡΠΈΠΏ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°Π½Ρ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΠΌΠ΅Π½, Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΠΈΠΏΠΎΠ². ΠΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π² Π‘++, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ. ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ ΡΠ·ΡΠΊΠ°. ΠΠΎΠ»Π΅Π΅ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΠΉ ΠΈ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΠ·ΡΠΊΠ° Π‘++. ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² ΠΠ»Π°Π²Π°Ρ 4, 5 ΠΈ 6 ΠΈ Π·Π΄Π΅ΡΡ Π½Π΅ ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ.
2.1 ΠΠΏΠΈΡΠ°Π½ΠΈΡ
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΈΠΌΡ (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π² Π‘++ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΎ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π½Π°Π΄ΠΎ Π·Π°Π΄Π°ΡΡ Π΅Π³ΠΎ ΡΠΈΠΏ, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΠΊ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΡΡΡΠ½ΠΎΡΡΡΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΈΠΌΡ. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠΈΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ:
char ch; int count = 1; char* name = Β«BjarneΒ»; struct complex (* float re, im; *); complex cvar; extern complex sqrt(complex); extern int error_number; typedef complex point; float real(complex* p) (* return p-Β»re; *); const double pi = 3.1415926535897932385; struct user;
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ ΠΈΠ· ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΏ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΡΠΎ Π΅ΡΡΡ ΠΎΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄Π»Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΡΠ½ΠΎΡΡΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ. ΠΠ»Ρ ch, count ΠΈ cvar ΡΡΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ β ΡΡΠ° ΠΏΠ°ΠΌΡΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π°. ΠΠ»Ρ real ΡΡΠΎ Π·Π°Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ»Ρ constant pi ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3.1415926535897932385. ΠΠ»Ρ complex ΡΡΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ. ΠΠ»Ρ point ΡΡΠΎ ΡΠΈΠΏ complex, ΠΏΠΎΡΡΠΎΠΌΡ point ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΎΠΌ complex. Π’ΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ
extern complex sqrt(complex); extern int error_number; struct user;
Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π³Π΄Π΅-ΡΠΎ Π΅ΡΠ΅. ΠΠΎΠ΄ (ΡΠ΅Π»ΠΎ) ΡΡΠ½ΠΊΡΠΈΠΈ sqrt Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ Π½Π΅ΠΊΠΈΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ, ΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ error_number ΡΠΈΠΏΠ° int Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ Π½Π΅ΠΊΠΈΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ, ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° user Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΡΡΠΎ ΠΎΠ½ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ. Π Π‘++ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ Π²ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²ΡΠ²Π°ΡΡΡΡ Ρ ΡΠΈΠΏΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΡΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ Π΅ΡΡΡ Π΄Π²Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ:
int count; int count; // ΠΎΡΠΈΠ±ΠΊΠ°: ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ extern int error_number; extern int error_number; // ΠΎΡΠΈΠ±ΠΊΠ°: Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²
Π° Π² ΡΡΠΎΠΌ β Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ (ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ extern ΡΠΌ. #4.2):
extern int error_number; extern int error_number;
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π°Π΄Π°ΡΡ Β«Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β» Π΄Π»Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ:
struct complex (* float re, im; *); typedef complex point; float real(complex* p) (* return p-Β»re *); const double pi = 3.1415926535897932385;
ΠΠ»Ρ ΡΠΈΠΏΠΎΠ², ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Β«Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β» Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎ. ΠΠ»Ρ Π½Π΅ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ:
int count = 1; char* name = Β«BjarneΒ»; //... count = 2; name = Β«MarianΒ»;
ΠΠ· Π²ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ
char ch;
Π½Π΅ Π·Π°Π΄Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, Π·Π°Π΄Π°ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ.
2.1.1 ΠΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄ΠΈΡ ΠΈΠΌΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. Π’ΠΎ Π΅ΡΡΡ, ΠΈΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Ρ ΠΈΠΌΠ΅Π½ΠΈ, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠ°ΠΊΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ), ΡΡΠ° ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΡΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° Π±Π»ΠΎΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅. ΠΠ»Ρ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ Π² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π½Π΅ Π² ΠΊΠ»Π°ΡΡΠ΅ (Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΡΡΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ) ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΡΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Π² Π±Π»ΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΡΡΠ²Π°ΡΡ (ΠΏΡΡΡΠ°ΡΡ) ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΈΠΌΡ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° Π΄Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· Π±Π»ΠΎΠΊΠ° ΠΈΠΌΡ Π²Π½ΠΎΠ²Ρ ΠΎΠ±ΡΠ΅ΡΠ°Π΅Ρ ΡΠ²ΠΎΠ΅ ΠΏΡΠ΅ΠΆΠ½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
int x; // Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ x
f() (* int x; // Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ x ΠΏΡΡΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ x x = 1; // ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌΡ x (* int x; // ΠΏΡΡΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ x x = 2; // ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π²ΡΠΎΡΠΎΠΌΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌΡ x *) x = 3; // ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌΡ x *)
int* p = amp;x; // Π²Π·ΡΡΡ Π°Π΄ΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ x
Π‘ΠΎΠΊΡΡΡΠΈΠ΅ ΠΈΠΌΠ΅Π½ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΈΡΠ°ΡΡΠΈΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΈΠΌΡ ΡΠΊΡΡΡΠΎ, ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ, ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΄Π½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ΅Π΄ΠΊΠΈΠ΅. ΠΠ½Π°ΡΠΈΡ ΡΠΎΠΊΡΡΡΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠΌΠ΅Π½ Π²ΡΠΎΠ΄Π΅ i ΠΈΠ»ΠΈ x Π½Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΡ Π½Π° Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΠΈ.