Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор Бтраустрап Π‘ΡŒΡΡ€Π½

Однако, Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, вошСдшСго Π² Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠΉ класс, большС компилятору Π½Π΅ извСстСн. НапримСр, Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ элСмСнт Π²Π΅ΠΊΡ‚ΠΎΡ€Π° являСтся 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 Π½Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡΡ Π½Π° нСприятности.