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

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

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

int b;

struct x {

 char* f() { return b; }

 char* b;

};

эквивалСнтСн

int b;

struct x {

 char* f();

 char* b;

};


inline char* x::f() { return b; } // пСрСнос

Π—Π΄Π΅ΡΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ x::f() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ x::b, Π° Π½Π΅ глобальноС b.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π² описании Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов, Π³Π΄Π΅ Ρ‚Π°ΠΊΠΎΠΉ пСрСнос Π±ΡƒΠ΄Π΅Ρ‚ синтаксичСски Π½Π΅Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌ. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ классы ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² R.9.8, Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы Π² Β§R.9.7.

R.9.4 БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹

Для Ρ‡Π»Π΅Π½Π° класса, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ описании класса Π·Π°Π΄Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ static. Для статичСского Ρ‡Π»Π΅Π½Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Π»Π°Π΄Π΅ΡŽΡ‚ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса. БтатичСский Ρ‡Π»Π΅Π½ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса. БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹ глобального класса ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ (Β§R.3.3). ОписаниС статичСского Ρ‡Π»Π΅Π½Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π² описании класса Π½Π΅ считаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄Π°Π½ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС, см. Ρ‚Π°ΠΊΠΆΠ΅. Β§R.18.3.

БтатичСская функция-Ρ‡Π»Π΅Π½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ this, поэтому для доступа ΠΊ нСстатичСским Ρ‡Π»Π΅Π½Π°ΠΌ своСго класса ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ . ΠΈΠ»ΠΈ -β€Ί. БтатичСская функция-Ρ‡Π»Π΅Π½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ. НСдопустимы статичСскиС ΠΈ нСстатичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹ локального класса (Β§R.9.8) Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π²Π½Π΅ описания класса. ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ классы Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ статичСских Ρ‡Π»Π΅Π½ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅.

К статичСскому Ρ‡Π»Π΅Π½Ρƒ mem класса c1 ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ c1::mem (Β§R.5.1), Ρ‚.Π΅. нСзависимо Π½ΠΈ ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. К Π½Π΅ΠΌΡƒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ . ΠΈ -β€Ί. Если ΠΊ статичСскому Ρ‡Π»Π΅Π½Ρƒ происходит ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ доступа, выраТСния, стоящиС слСва ΠΎΡ‚ . ΠΈΠ»ΠΈ -β€Ί Π½Π΅ эквивалСнтны. БтатичСский Ρ‡Π»Π΅Π½ mem сущСствуСт Π΄Π°ΠΆΠ΅, Ссли Π½Π΅ создано Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса c1. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ run_chain, idle ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π°ΠΆΠ΅, Ссли Π½Π΅ Π±Ρ‹Π»ΠΎ создано Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса process:

class process {

 static int no_of_process;

 static process* run_chain;

 static process* running;

 static process* idle;

 //…

public:

 //…

 int state();

 static void reshedule();

 //…

};

Π—Π΄Π΅ΡΡŒ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ reshedule ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· указания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса process Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

void f()

{

 process::reshedule();

}

БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… классов ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΡ… видимости - Ρ„Π°ΠΉΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

void process::reshedule() {/*… */};

int process::no_of_process = 1;

process* process::running = get_main();

process* process::run_chain = process::running;

БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ класса (Β§R.11), Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ области видимости.

Π’ Ρ‚ΠΈΠΏΠ΅ статичСского Ρ‡Π»Π΅Π½Π° Π½Π΅ участвуСт имя класса, Ρ‚Π°ΠΊ Ρ‚ΠΈΠΏ process::no_of_process Π΅ΡΡ‚ΡŒ int, Π° Ρ‚ΠΈΠΏ &process::reshedule() - void(*)().

R.9.5 ОбъСдинСния

ОбъСдинСниС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ структуру, всС Ρ‡Π»Π΅Π½Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ смСщСния, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΅Π΅ достаточно Π²Π΅Π»ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ любой ΠΈΠ· Π΅Π΅ Ρ‡Π»Π΅Π½ΠΎΠ². Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ объСдинСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‡Π»Π΅Π½. Π’ объСдинСнии ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ (Π² Ρ‚ΠΎΠΌ числС конструкторы ΠΈ дСструкторы), Π½ΠΎ Π½Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Β§R.10.2). ОбъСдинСниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ само ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π§Π»Π΅Π½ΠΎΠΌ объСдинСния Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса с конструктором ΠΈΠ»ΠΈ дСструктором, Π° Ρ‚Π°ΠΊΠΆΠ΅ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ присваивания (Β§R.13.4.3). ОбъСдинСниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ статичСских Ρ‡Π»Π΅Π½ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅.

ОбъСдинСниС вида

union { список-Ρ‡Π»Π΅Π½ΠΎΠ² }

называСтся бСзымянным объСдинСниСм, ΠΎΠ½ΠΎ опрСдСляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ (ΠΈ Π±Π΅Π· Ρ‚ΠΈΠΏΠ°). ИмСна всСх Ρ‡Π»Π΅Π½ΠΎΠ² бСзымянного объСдинСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠΌΠ΅Π½ Π² Ρ‚ΠΎΠΉ области видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ описано объСдинСниС; ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² этой области видимости нСпосрСдствСнно, Π±Π΅Π· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ (Β§R.5.2.4).

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

void f()

{

 union { int a; char* p; };

 a = 1;

 //…

 p = "Jennifer";

 //…

}

Π—Π΄Π΅ΡΡŒ a ΠΈ p ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (Π½Π΅ Ρ‡Π»Π΅Π½Ρ‹), Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ входят Π² ΠΎΠ΄Π½ΠΎ объСдинСниС, ΠΈΡ… адрСса ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ бСзымянныС объСдинСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ со спСцификациСй static. БСзымянныС объСдинСния Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ частных ΠΈΠ»ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² (Β§R.11), Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ².

Если описаны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ объСдинСния ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π½Π΅Π³ΠΎ, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ считаСтся бСзымянным, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

union { int aa; char* p; } obj, *ptr= &obj;

aa = 1; // ошибка

ptr-β€Ίaa = 1; // Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ

Π—Π΄Π΅ΡΡŒ присваиваниС простому ΠΈΠΌΠ΅Π½ΠΈ aa Π½Π΅Π·Π°ΠΊΠΎΠ½Π½ΠΎ, Ρ‚.ΠΊ. имя Ρ‡Π»Π΅Π½Π° Π½Π΅ привязано Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ объСдинСний, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… конструкторов, описываСтся Π² Β§R.8.4.1.

R.9.6 Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ-Ρ‡Π»Π΅Π½Π°, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Π²ΠΈΠ΄,

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

Π·Π°Π΄Π°Π΅Ρ‚ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π΄Π»ΠΈΠ½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ отдСляСтся ΠΎΡ‚ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ класса зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Поля ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ адрСсуСмыС элСмСнты памяти. На ΠΎΠ΄Π½ΠΈΡ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… поля ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ этих элСмСнтов, Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… - Π½Π΅Ρ‚. Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Ρ‚ΠΎΠΆΠ΅ опрСдСляСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. На ΠΎΠ΄Π½ΠΈΡ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… значСния ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля справа Π½Π°Π»Π΅Π²ΠΎ, Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… - слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ располоТСниС ΠΏΠΎΠ»Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дополнСния нулями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ бСзымянныС Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля. ΠžΡΠΎΠ±Ρ‹ΠΉ случай, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ бСзымянноС ΠΏΠΎΠ»Π΅ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Оно Π·Π°Π΄Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ поля ΠΏΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π΅ элСмСнта памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ.

БСзымянноС ΠΏΠΎΠ»Π΅ Π½Π΅ являСтся Ρ‡Π»Π΅Π½ΠΎΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ цСлочислСнный Ρ‚ΠΈΠΏ (Β§R.3.6.1). Π˜Ρ… интСрпрСтация зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, считаСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ int (Ρ‚.Π΅. Π±Π΅Π· явного использования signed ΠΈΠ»ΠΈ unsigned) Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ взятия адрСса & Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ полям, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля, Π½ΠΈ ссылок Π½Π° Π½ΠΈΡ….

R.9.7 Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ описания классов

Класс ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² описании Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса. Π’Π°ΠΊΠΎΠΉ класс Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ. Имя Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса локально ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅ΠΌΡƒ классу. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс находится Π² области видимости ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π³ΠΎ класса. Если Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ явного использования ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ссылок ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ Π² описаниях Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса допустимы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ², статичСских Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈ элСмСнтов пСрСчислСния ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π³ΠΎ класса.

int x;

int y;


class enclose {

public:

 int x;

 static int s;


 class inner {


 void f(int i)

 {

  x = i; // ошибка: присваиваниС enclose::x

  s = i; // Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ: присваиваниС enclose::s

  ::x = i; // Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ: присваиваниС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ x

  y = i; // Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ: присваиваниС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ y

 }


 void g(enclose* p, int i)

 {

  p-β€Ίx = i; // Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ: присваиваниС enclose::x

 }


 };

};

inner* p = 0; // ошибка: `inner' Π²Π½Π΅ области видимости

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ особых ΠΏΡ€Π°Π² доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π³ΠΎ класса, ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ доступа (Β§R.11). Аналогично, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π³ΠΎ класса Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ особых ΠΏΡ€Π°Π² доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса ΠΈ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ доступа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

class E {

 int x;

 class I {

  int y;

  void f(E* p, int i)

  {

   p-β€Ίx = i; // ошибка: E::x частный Ρ‡Π»Π΅Π½

  }

 };


 int g(I* p)

 {

  return p-β€Ίy; // ошибка: I::y частный Ρ‡Π»Π΅Π½

 }

};

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, статичСскиС Ρ‡Π»Π΅Π½Ρ‹ ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ

класса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² глобальной области видимости, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

class enclose {

 class inner {

  static int x;

  void f(int i);

 };

};


typedef enclose::inner ei;

int ei::x = 1;


void enclose::inner::f(int i) {/*… */}

Подобно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρƒ друТСствСнная функция, опрСдСлСнная Π² Π΄Π°Π½Π½ΠΎΠΌ классС, находится Π² области видимости этого класса. Она подчиняСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ связывания ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ (ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π²Ρ‹ΡˆΠ΅ ΠΈ Π² Β§R.10.4), ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ особых ΠΏΡ€Π°Π² доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π³ΠΎ класса ΠΈ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ этого класса (Β§R.11).