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

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

Автор ΠœΡŽΡ€Ρ€Π΅ΠΉ Π₯ΠΈΠ»Π»

float y[4][3] = (* 1, 3, 5, 2, 4, 6, 3, 5, 7 *);

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для y начинаСтся с Π»Π΅Π²ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобки, Π½ΠΎ Π½Π΅ начинаСтся с Π½Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для y[0], поэтому ΠΈΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Ρ€ΠΈ значСния ΠΈΠ· списка. Аналогично, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для y[1] ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ для y[2]. Π’Π°ΠΊ ΠΆΠ΅

float y[4][3] = (* (* 1 *), (* 2 *), (* 3 *), (* 4 *) *);

ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ столбСц y (рассматриваСмого ΠΊΠ°ΠΊ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив) ΠΈ оставляСт ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты нулями.

8.6.2 ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Классов

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ списком ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²; это ΠΆΠ΅ относится ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ объСдинниС. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса с конструктором Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Если класс ΠΈΠΌΠ΅Π΅Ρ‚ конструктор, Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚ΠΎ этот конструктор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ явно Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для конструктора ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Π² описании ΠΈΠ»ΠΈ ΠΊ Ρ‚ΠΈΠΏΡƒ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ new. Π‘Π»Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ всС Π΄Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (#8.4): struct complex (*

float re; float im; complex (float r,float i = 0) (* re=r; im=i; *) *);

complex zz1(1,0); complex zz2(1); complex* zp1 = new complex (1,0); complex* zp1 = new complex (1);

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ явного использования ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ =. НапримСр:

complex zz3 = complex (1,0); complex zz4 = complex (1); complex zz5 = 1; complex zz6 = zz3;

Если Π΅ΡΡ‚ΡŒ конструктор, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ свого собствСнного класса, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»Π·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ этого класса, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° конструктором.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠΌ составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ (1) Ссли класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ конструктора, ΠΈΠ»ΠΈ (2) Ссли Π΅Π³ΠΎ конструкторы Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΠ»ΠΈ (3) Ссли составной ΠΎΠ±Π΅ΠΊΡ‚ являСтся классом с конструктором, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½Π° (см. #10). Π’ случаС 2 конструктор вызывСтся ΠΏΡ€ΠΈ создании составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если составной ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся классом (Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ являСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ) для Π²Ρ‹Π·ΠΎΠ²Π° конструктора ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если Ρ‡Π»Π΅Π½ составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° являСтся Ρ‡Π»Π΅Π½ΠΎΠΌ класа с дСструкторами, Ρ‚ΠΎ этот дСструктор вызываСтся ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΆΠ΅Π½ΠΈΠΈ составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

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

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 ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ чтСния описания слСва Π½Π°Ρ€ΠΏΠ°Π²ΠΎ. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ с = Π΄Π°Π΅Ρ‚ ассоцированному с Π½ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅; послСдущиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π΅ΡΡΠΈΡŽ ΠΎΡ‚ присвоСнного знчСния.