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

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

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

class s : public b (* public: ... *);

8.5.13 ОбъСдинСния

ОбъСдинСниС ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ структурой, всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ со смСщСния 0, ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ достаточСн для содСрТания любого ΠΈΠ· Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ². Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² объСдинСии ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π½Π΅ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠ±Π΅ΠΊΡ‚ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ². ОбъСдинСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π»Π΅Π½Ρ‹ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ конструкторы ΠΈ дСструкторы). Из объСдинСния Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π²Π΅Ρ‚ΠΈ класс. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса с конструктором ΠΈΠ»ΠΈ дСструктором Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠΌ объСдинСния.

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

union (* список_Ρ‡Π»Π΅Π½ΠΎΠ² *);

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

union (* int a; char* p; *); a = 1; // ... p = Β«asdfΒ»;

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

8.5.14 Поля Π±ΠΈΡ‚

ΠžΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ_Ρ‡Π»Π΅Π½Π° Π²ΠΈΠ΄Π°

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

опрСдСляСт ΠΏΠΎΠ»Π΅; Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Π° отдСляСтся ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ поля Π΄Π²Π΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. Поля ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅; ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ слов. ПолС , Π½Π΅ Π²Π»Π΅Π·Π°ΡŽΡ‰Π΅Π΅ Π² ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ Π² Ρ†Π΅Π»ΠΎΠΌ мСсто, помСщаСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ слово. ПолС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡˆΠΈΡ€Π΅ слова. На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΎΠ½ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ справа Π½Π°Π»Π΅Π²ΠΎ, Π° Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, см. #2.6.

НСимСнованныС поля ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ для согласовния внСшнС прСдписанных Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΉ (Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ²). Π’ особых слчаях Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ поля Π΄Π»ΠΈΠ½Ρ‹ 0 Π·Π°Π΄Π°ΡŽΡ‚ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π³ΠΎ поля ΠΏΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π΅ слова. НС трСбуСтся Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π»ΡŽΠ±Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ†Π΅Π»Ρ‹Ρ…. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°ΠΆΠ΅ Ρ†Π΅Π»Ρ‹Π΅ поля ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ unsigned. По этим ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ рСкомСндуСтся ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ поля ΠΊΠ°ΠΊ unsigned. К полям Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ опСрация получСния адрСса amp;, поэтому Π½Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° поля.

Поля Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ объСдинСния.

8.5.15 Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы

Класс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ, ΠΎΠ½Π°ΠΊΠΎ, лишь соглашСниС ΠΎ записи, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ области видимости. НапримСр:

int x;

class enclose (* // ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ int x; class inner (* // Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ int y; void f(int); *); int g(inner*); *);

inner a; void inner::f(int i) (* x = i; *) // присваиваСт ::x int enclose::g(inner* p) (* return p-Β»y; *) // ошибка

8.6 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

ΠžΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ описываСмого ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.

ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€: = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ = (* список_ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² , opt *) ( список_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ) список_ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ список_ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² , список_ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² (* список_ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² *)

ВсС выраТСния Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ статичСской ΠΈΠ»ΠΈ внСшнСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ константными выраТСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ опсаны Π² #12, ΠΈΠ»ΠΈ выраТСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сводятся ΠΊ адрСсам Ρ€Π°Π½Π΅Π΅ описанных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ со смСщСниСм Π½Π° константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. АвтоматичСскиС ΠΈ рСгистровыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ½Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π»ΡŽΠ±Ρ‹ΠΌΠΈ выраТСниями, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‰ΠΈΠΌΠΈ константы, Ρ€Π½Π΅Π΅ описанныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ГарантируСтся, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ статичСскиС ΠΈ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния 0. ГарантируСтся, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ автоматичСскиС ΠΈ ргистровыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния «пустоС мСсто»*.

– * Π’ английском – Β«garbageΒ», ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ Π·Π°Ρ‚Π΅Ρ€Ρ‚ΠΎΠ΅ мСсто [памяти], Ρ‚.Π΅. Ссли пСрСмСнная цСлая, Ρ‚ΠΎ 0, Ссли char, Ρ‚ΠΎ '\0', Ссли ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π’, Ρ‚ΠΎ (Π’*) NULL. (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².)

Когда ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ примСняСтся ΠΊ скаляру (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ арифмСтичСского Ρ‚ΠΈΠΏΠ°), ΠΎΠ½ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° находится ΠΈΠ· выраТСния; Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ прСобразвания, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ присваивании.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ () Π½Π΅ являСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Ρ‚ΠΎ X a(); являСтся Π½Π΅ описаниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса X, Π° описаниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ X.

8.6.1 Бписок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²

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

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

НапримСр,

int x[] = (* 1, 3, 5 *);

описываСт ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ x ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΈΠΌΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€ΠΈ элСмСнта, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ Π±Ρ‹Π» ΡƒΠΊΠ°Π·Π°Π½ ΠΈ Π΄Π°Π½ΠΎ Ρ‚Ρ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

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

являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ снабТСнной ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками ΠΈΠ½Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ: 1,3 ΠΈ 5 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ряд массива y[0], Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, y[0][0], y[0][1] ΠΈ y[0][2]. Аналогично, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ строки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ y[1] ΠΈ y[2]. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ заканчваСтся Ρ€Π°Π½ΡŒΡˆΠ΅, поэтому y[3] инициализируСтся 0-ями. Π’ Ρ‚ΠΎΠ½ΠΎcΡ‚ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнут с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ

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 конструктор вызывСтся ΠΏΡ€ΠΈ создании составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если составной ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся классом (Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ являСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ) для Π²Ρ‹Π·ΠΎΠ²Π° конструктора ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если Ρ‡Π»Π΅Π½ составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° являСтся Ρ‡Π»Π΅Π½ΠΎΠΌ класа с дСструкторами, Ρ‚ΠΎ этот дСструктор вызываСтся ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΆΠ΅Π½ΠΈΠΈ составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.