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

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

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

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ для Π½Π΅Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… статичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ‹Π·Π²Π°ΡŽΡ‚ΡΡ Π² порядкС ΠΈΡ… появлСния Π² Ρ„Π°ΠΉΠ»Π΅; дСструкторы для Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. ВызываСтся Π»ΠΈ конструктор ΠΈΠ»ΠΈ дСструктор для локального статичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² случаС Ссли функция, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ описан, Π½Π΅ вызываСтся, Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π½ΠΎ. Если конструктор для локального статичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° взываСтся, Ρ‚ΠΎ ΠΎΠ½ вызываСтся послС конструкторов для Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², лСксичСски Π΅ΠΌΡƒ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…. Если для локального статичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вызываСтся дСструктор, Ρ‚ΠΎ ΠΎΠ½ вызываСтся Π΄ΠΎ дСструкторов для Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², лСксичСски Π΅ΠΌΡƒ ΠΏΡ€Π΅ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ….

8.6.3 Бсылки

Когда пСрСмСнная описана ΠΊΠ°ΠΊ T amp;, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ «ссылка Π½Π° Ρ‚ΠΈΠΏ TΒ», ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° T, ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² T. Бсыка становится Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НапримСр:

int i; int amp; r = i; r = 1; // Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i становится 1 int* p = amp;r; // p ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° i

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Ρ†ΠΈΠΈ. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ссылки ΠΎΡ‡Π΅Π½ΡŒ силно зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΠΉ присваиваСтся. Если ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для ссылки Π½Π° Ρ‚ΠΈΠΏ T Π½Π΅ являСтся lvalue, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ создан ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±Π΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° T. Π’ΠΎΠ³Π΄Π° ссылка станСт ΠΈΠΌΠ΅Π½Π΅ΠΌ для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, созданного Ρ‚Π°ΠΊΠΈΠΌ способом, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ создан. НапримСр:

double amp; rr = 1;

допустимо, ΠΈ rr Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° double, содСрТащий Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1.0.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ссылка Π½Π° класс B ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π²Π°Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса D ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ B являСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом класса D (Π² этом случаС D Π΅ΡΡ‚ΡŒ B).

Бсылки особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². НапримСр:

struct B (* ... *); struct D : B (* ... *); int f(B amp;); D a; f(a);

8.6.4 ΠœΠ°ΡΡΠΈΠ²Ρ‹ символов

Массив char ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строкой. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ символы строки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Ρ‡Π»Π΅Π½Ρ‹ массива. НапрмСр:

char msg[] = Β«Syntax error on line %d\nΒ»;

дСмонстрируСт массив символов, Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»Π·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ строкой. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ sizeof(msg)==25.

8.7 ИмСна Ρ‚ΠΈΠΏΠΎΠ²

Иногда (для нСявного задания прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° sizeof ΠΈΠ»ΠΈ new) Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя Ρ‚ΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ выполняСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Β«ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΈΠΏΠ°Β» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎ сути являСтся описаниСм для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° этого Ρ‚ΠΈΠΏΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

имя_Ρ‚ΠΈΠΏΠ°: спСцификатор_Ρ‚ΠΈΠΏΠ° абстрактный_ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ

абстрактный_ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ: пустой * абстрактный_ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ абстрактный_ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ( списоко_писатСлСй_ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) абстрактный_ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ [ константноС_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ opt ] ( абстрактный_ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ )

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ СдинствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² абстрактном_описатСлС, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² случаС, Ссли Π±Ρ‹ конструкция Π±Ρ‹Π»Π° описатСлСм Π² описании. Π’ΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ являСтся – Ρ‚ΠΎΡ‚ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚ΠΈΠΏ гипотСтичСского ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. НапримСр,

int int * int *[3] int (*)[3] int *() int (*)()

ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚, соотвСтсвСнно, Ρ‚ΠΈΠΏΡ‹ Β«Ρ†Π΅Π»ΠΎΠ΅Β», Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ†Π»ΠΎΠ΅Β», «массив ΠΈΠ· 3 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ†Π΅Π»Ρ‹Π΅Β», Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив ΠΈΠ· 3 Ρ†Π΅Π»Ρ‹Ρ…Β», «функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ†Π΅Π»ΠΎΠ΅Β» ΠΈ Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Ρ†Π΅Π»ΠΎΠ΅Β».

8.8 Typedef – ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°

Описания, содСрТащиС спСцификатор_описания typedef, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами, ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

typedef-имя: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Π’Π½ΡƒΡ‚Ρ€ΠΈ области видимости описания, содСрТащСго typedef, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ опсатСля, становится Π² этом мСстС синтаксичСски эквивалСнтным ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ, ассоциированный с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ…ΠΎΠΌ, ΠΊΠ°ΠΊ описываСтся Π² #8.4. Π‘ΠΏΠ΅Ρ†Ρ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€_описания typedef Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ‡Π»Π΅Π½Π° класса. Имя класса ΠΈΠ»ΠΈ пСрСчислСния Ρ‚Π°ΠΊΠΆΠ΅ являСтся typedef-ΠΈΠΌΠ΅Π½Π΅ΠΌ. НапримСр, послС

typedef int MILES, *KLICKSP; struct complex (* double re, im; *);

каТдая ΠΈΠ· конструкций

MILES distance; extern KLICKSP metricp; complex z, *zp;

являСтся допустимым описаниСм; distance ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int, metricp ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° intΒ».

typedef Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½Π΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ синонимы для Ρ‚ΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ. Π’Π°ΠΊ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ distance рассматриваСтся ΠΊΠ°ΠΊ ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Π² точности Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ int ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Но описаниС класса Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ. НапримСр:

struct X (* int a; *); struct Y (* int a; *); X a1; Y a2; int a3;

описываСт Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

ОписаниС вида

описаниС_ΠΈΠΌΠ΅Π½ΠΈ: сост ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ; enum ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ;

спСцифицируСт, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚Ρ€ΠΎΠ³ΠΎ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ) класса ΠΈΠ»ΠΈ пСрСчислния. Π’Π°ΠΊΠΈΠ΅ описания ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ классы, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°. НапримСр:

class vector;

class matrix (* // ... friend vector operator*(matrix amp;, vector amp;); *);

class vector (* // ... friend matrix operator*(matrix amp;, vector amp;); *);

8.9 ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π’ Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ нСколько (Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ…) описаний Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, это имя называСтся ΠΏΡ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΡ€ΠΈ использовании этого ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ функция выбираСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сравнСния Ρ‚ΠΈΠΏΠΎΠ² фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² описаниях Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Поиск Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, осущСствляСтся Π² Ρ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… шага:

Π˜ΡΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π½Π°ΠΉΠ΄Π½Π°.

Π˜ΡΠΊΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ с использованиСм стандартных ΠΏΡ€ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ (#6.6-8) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡƒΡŽ.

Π˜ΡΠΊΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ с использованиСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ (#6.5.6). Если Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π΅Π΄ΠΈΠ½Ρ‚Π²Π΅Π½Π½ΠΎΠ΅ мноТСство ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅.

Ноль, char ΠΈΠ»ΠΈ short ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Ρ‚ΠΈΠΏΠ° int. Float ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠΎΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Ρ‚ΠΈΠΏΠ° double.

Над ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ прСобразования: int Π² long, int Π² double ΠΈ прСобрзования ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ссылок (#6.7-8).

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Ρ‡Π»Π΅Π½Π° ΠΈ Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ operator, Π»ΡŽΠ±ΠΎΠΌΡƒ описанию Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π²Π°Ρ‚ΡŒ описаниС overload, см. #8.1. НапримСр:

overload abs; double abs(double); int abs(int);

abs(1); // вызываСтся abs(int); abs(1.0); // вызываСтся abs(double);

НапримСр:

class X (* ... X (int); *); class Y (* ... Y (int); *);

class Z (* ... Z (char*); *);

overload int f (X), f (Y); overload int g (X), g (Z);

f (1); // нСдопустимо: f(X(1)) ΠΈΠ»ΠΈ f(Y(1)) g (1); // g(X(1)) g (Β«asdfΒ»); // g(Z(Β«asdfΒ»))

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ взятия адрСса amp; ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² присваивании ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ опрСдСляСт, адрСс ΠΊΠ°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Ρ€Π°Ρ‚ΡŒ. НапрмСр:

int operator=(matrix amp;, matrix amp;); int operator=(vector amp;, vector amp;); int (*pfm)(matrix amp;, matrix amp;) = amp;operator=; int (*pfv)(vector amp;, vector amp;) = amp;operator=; int (*pfx)(...) = amp;operator=;

8.10 Описания пСрСчислСний

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ int с ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ констатами.

enum_спСцификатор: enum ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ opt (* enum_список *)

enum_список: ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ enum_список , ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ

ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ = константноС_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π² enum-спискС описаны ΠΊΠ°ΠΊ константы ΠΈ ΠΌΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²ΠΎ всСх мСстах, Π³Π΄Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ константы. Если Π½Π΅ появляСтся Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ пСрСчислитСля с =, Ρ‚ΠΎ значСния ΡΠΎΠΎΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… констант Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 0 ΠΈ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‚ Π½Π° 1 ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ чтСния описания слСва Π½Π°Ρ€ΠΏΠ°Π²ΠΎ. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ с = Π΄Π°Π΅Ρ‚ ассоцированному с Π½ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅; послСдущиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π΅ΡΡΠΈΡŽ ΠΎΡ‚ присвоСнного знчСния.