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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΎΠ΅ руководство ΠΏΠΎ C++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 13

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

{

 //…

}

БпСцификация virtual ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² описаниях нСстатичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΏΡ€ΠΈ описании класса (см. Β§R.10.2).

R.7.1.3 БпСцификация typedef

Описания со спСцификациСй typedef Π·Π°Π΄Π°ΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для обозначСния основных ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². БпСцификация typedef нСдопустима Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Β§R.8.3).

имя-typedef:

 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Π’ ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… области видимости (Β§R.3.2) описания typedef любой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π² части любого ΠΈΠ· описатСлСй, становится синтаксичСски эквивалСнтным слуТСбному слову ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ, связанный с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠ°ΠΊ описано Π² Β§R.8. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, имя-typedef являСтся синонимом Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ описания класса (Β§R.9.1) имя-typedef Π½Π΅ добавляСт Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, послС описания

typedef int MILES, *KLICKSP;

конструкции

MILES distance;

extern KLICKSP metricp;

ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌΠΈ описаниями, Ρ‚ΠΈΠΏ distance Π΅ΡΡ‚ΡŒ int, Π° Ρƒ metricp Ρ‚ΠΈΠΏ "ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° int".

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ typedef ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ имя Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ ΠΎΠΏΡΡ‚ΡŒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Ρ‚ΠΈΠΏ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ ΡΡΡ‹Π»Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΉ области видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΈΠΏ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ описан, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

typedef struct s {/*… */} s;

typedef int I;

typedef int I;

typedef I I;

БСзымянный класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСтся Π² typedef, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² качСствС своСго ΠΈΠΌΠ΅Π½ΠΈ имя, использованноС Π² typedef, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

typedef struct {/*… */} S; // имя структуры стало S

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ описания typedef нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ имя Ρ‚ΠΈΠΏΠ°, описанного Π² этой ΠΆΠ΅ области видимости, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

class complex {/*… */};

typedef int complex; // ошибка: ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Аналогично, нСльзя ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚ΠΈΠΏΠ°, описанного Π² этой ΠΆΠ΅ области видимости, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π» Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

typedef int complex;

class complex {/*… */}; // ошибка: ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Имя-typedef, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ класс, являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ-класса (Β§R.9.1). Π‘ΠΈΠ½ΠΎΠ½ΠΈΠΌ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ послС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… прСфиксов: class, struct ΠΈ union, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΈΠΌΠ΅Π½Π°Ρ… конструкторов ΠΈ дСструкторов Π² описании самого класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

struct S {

 S();

 ~S();

};


typedef struct S T;

S a = T(); // Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ

struct T* p; // ошибка

R.7.1.4 БпСцификация шаблона Ρ‚ΠΈΠΏΠ°

БпСцификация шаблона Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для задания сСмСйства Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (см. Β§R.14).

R.7.1.5 БпСцификация friend

БпСцификация friend ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для задания доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ класса (см. Β§R.11.4).

R.7.1.6 БпСцификация Ρ‚ΠΈΠΏΠ°

К спСцификации Ρ‚ΠΈΠΏΠ° относятся:

спСцификация-Ρ‚ΠΈΠΏΠ°:

 ΠΈΠΌΡ-простого-Ρ‚ΠΈΠΏΠ°

 ΡΠΏΠ΅Ρ†ΠΈΡ„икация-класса

 ΡΠΏΠ΅Ρ†ΠΈΡ„икация-пСрСчислСния

 ΡΠΏΠ΅Ρ†ΠΈΡ„икация-слоТного-Ρ‚ΠΈΠΏΠ°

 :: имя-класса

 const

 volatile

ΠŸΡ€ΠΈ описании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° слуТСбныС слова const ΠΈ volatile ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ любой Π·Π°ΠΊΠΎΠ½Π½ΠΎΠΉ спСцификации-Ρ‚ΠΈΠΏΠ°. Π’ΠΎ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях Π² описании ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ спСцификации-Ρ‚ΠΈΠΏΠ°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ со спСцификациСй const ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² дальнСйшСм. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ со спСцификациСй const, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ Π½Π΅ Π±Ρ‹Π» явно описан ΠΊΠ°ΠΊ extern, Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ (Β§R.8.4, Β§R.12.1). Π¦Π΅Π»ΠΎΠ΅ со спСцификациСй const, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ-константой, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ-константС (Β§R.5.19). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива со спСцификациСй const ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ нСстатичСский Ρ‡Π»Π΅Π½, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса со спСцификациСй const сам считаСтся const (Β§R.9.3.1). ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Π±Π΅Π· конструктора ΠΈΠ»ΠΈ дСструктора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ const, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° записи Π² Π»ΡŽΠ±ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ особой адрСсной ситуации, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ бСсслСдно, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΈΠΌΠ΅Π» спСцификации const.

НС сущСствуСт Π½Π΅ зависящСго ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ объяснСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² со спСцификациСй volatile. Она слуТит подсказкой транслятору ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ слишком Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, связанной с этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ способами, скрытыми ΠΎΡ‚ транслятора. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива со спСцификациСй volatile ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ нСстатичСский Ρ‡Π»Π΅Π½, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса со спСцификациСй volatile сам считаСтся volatile (Β§R.9.3.1).

Если спСцификация-Ρ‚ΠΈΠΏΠ° отсутствуСт Π² описании, ΠΎΠ½Π° считаСтся Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊ int.

имя-простого-Ρ‚ΠΈΠΏΠ°:

 ΠΏΠΎΠ»Π½ΠΎΠ΅-имя-класса

 ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅-имя-Ρ‚ΠΈΠΏΠ°

 char

 short

 int

 long

 signed

 unsigned

 float

 double

 void

ВмСстС с int нСльзя Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ слуТСбного слова long ΠΈΠ»ΠΈ short. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ΅, Ρ‚ΠΎΠ³Π΄Π° считаСтся, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π΅ΡΡ‚ΡŒ int. Π‘Π»ΡƒΠΆΠ΅Π±Π½ΠΎΠ΅ слово long ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ вмСстС с double. ВмСстС с char, short, int ΠΈΠ»ΠΈ long нСльзя Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ слуТСбного слова signed ΠΈΠ»ΠΈ unsigned. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ΅, Ρ‚ΠΎΠ³Π΄Π° считаСтся, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π΅ΡΡ‚ΡŒ int. БпСцификация signed ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° char ΠΈ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠ»Ρ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, для Π΄Ρ€ΡƒΠ³ΠΈΡ… цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ² эта спСцификация ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Π°.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ спСцификация-класса ΠΈ спСцификация-пСрСчислСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² Β§R.9 ΠΈ Β§R.7.2 соотвСтствСнно.

спСцификация-слоТного-Ρ‚ΠΈΠΏΠ°:

 ΡΠ»ΡƒΠΆΠ΅Π±Π½ΠΎΠ΅-слово-класса имя-класса

 ΡΠ»ΡƒΠΆΠ΅Π±Π½ΠΎΠ΅-слово-класса ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

слуТСбноС-слово-класса:

 class

 struct

 union

Если Π·Π°Π΄Π°Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, спСцификация-слоТного-Ρ‚ΠΈΠΏΠ° описываСт Π΅Π³ΠΎ ΠΊΠ°ΠΊ имя-класса (см. Β§R.9.1).

Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ спСцификации union, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ объСдинСниС. Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ спСцификации class, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ спСцификаций class ΠΈΠ»ΠΈ struct. Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ спСцификации struct, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ спСцификации class ΠΈΠ»ΠΈ struct. ИмСна Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (Β§R.9.7) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π³ΠΎ класса:

ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅-имя-Ρ‚ΠΈΠΏΠ°:

 ΠΈΠΌΡ-typedef

 ΠΈΠΌΡ-класса :: ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅-имя-Ρ‚ΠΈΠΏΠ°

полноС-имя-класса:

 ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅-имя-класса

 :: ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅-имя-класса

ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅-имя-класса:

 ΠΈΠΌΡ-класса

 ΠΈΠΌΡ-класса :: ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅-имя-класса

Имя, ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ-класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π² этом классС ΠΈΠ»ΠΈ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС этого класса. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, имя, описанноС Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС, Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Ρ‡Π»Π΅Π½Ρ‹ с этим ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов (см. Β§R.3.2).

R.7.2 ОписаниС пСрСчислСния

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ являСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ цСлочислСнным Ρ‚ΠΈΠΏΠΎΠΌ (Β§R.3.6.1) с константами-ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Π•Π³ΠΎ имя Π² своСй области видимости становится конструкциСй имя-пСрСчислСния, Ρ‚.Π΅. слуТит Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ словом.

имя-пСрСчислСния:

 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

спСцификация-пСрСчислСния:

 enum ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ opt { список-пСрСчислСния }

список-пСрСчислСния:

 ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚-пСрСчислСния

 ΡΠΏΠΈΡΠΎΠΊ-пСрСчислСния, элСмСнт-пСрСчислСния

элСмСнт-пСрСчислСния:

 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-константа

ВсС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ· списка-пСрСчислСния ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ описанными ΠΊΠ°ΠΊ константы ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²ΡΡŽΠ΄Ρƒ, Π³Π΄Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ константы. Если Π½Π΅ Π±Ρ‹Π»ΠΎ элСмСнтов пСрСчислСния с =, Ρ‚ΠΎ значСния констант Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с нуля ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ продвиТСния Π² спискС слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. Если элСмСнт пСрСчислСния встрСтился с =, Ρ‚ΠΎ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ части Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ значСния, начиная с Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта пСрСчислСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° int ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΊ int с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных цСлочислСнных ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ (Β§R.4.1).

ИмСна элСмСнтов пСрСчислСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов пСрСчислСния Ρ‚ΠΎΠΉ ΠΆΠ΅ области видимости. ЗначСния элСмСнтов пСрСчислСния Π½Π΅ обязаны ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. БчитаСтся, Ρ‡Ρ‚ΠΎ элСмСнт пСрСчислСния описан с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° появлСния Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния, (Ссли ΠΎΠ½ΠΎ Π΅ΡΡ‚ΡŒ). НапримСр, Π² опрСдСлСниях

enum {a, b, c=0};

enum {d, e, f=e+2};

значСния a, c, ΠΈ d Π·Π°Π΄Π°Π½Ρ‹ ΠΊΠ°ΠΊ 0, b ΠΈ e ΠΊΠ°ΠΊ 1, Π° f ΠΊΠ°ΠΊ 3.

КаТдоС пСрСчислСниС являСтся цСлочислСнным Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΈΠΏΠΎΠΌ элСмСнта пСрСчислСния считаСтся Π΄Π°Π½Π½ΠΎΠ΅ пСрСчислСниС. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта пСрСчислСния ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° пСрСчислСния прСобразуСтся ΠΊ Ρ†Π΅Π»ΠΎΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных цСлочислСнных ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ (Β§R.4.1). НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅: