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

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

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

class circle: public shape {

 int radius;

public:

 void rotate(int) {}

 void draw(); // Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π³Π΄Π΅-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°

};

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· конструктора абстрактного класса, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ прямого ΠΈΠ»ΠΈ косвСнного Π²Ρ‹Π·ΠΎΠ²Π° чистой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, созданного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ конструктора, Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.

R.10.4 Π‘Π²ΠΎΠ΄ΠΊΠ° ΠΏΡ€Π°Π²ΠΈΠ» области видимости

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ свСсти Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° областСй видимости для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C++. Π­Ρ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ для всСх ΠΈΠΌΠ΅Π½ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ имя-typedef (Β§R.7.1.3) ΠΈ имя-класса (Β§R.9.1)) ΠΈ Π² любом контСкстС, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ допустимы ΠΏΠΎ синтаксису языка. Π—Π΄Π΅ΡΡŒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ области видимости Π½Π° лСксичСском ΡƒΡ€ΠΎΠ²Π½Π΅, вопросы связывания ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Β§R.3.3. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° описания Π±Ρ‹Π»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ Π² Β§R.3.2.

ВсякоС использованиС ΠΈΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ (Π½Π΅ считая ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ) Π² области Π΅Π³ΠΎ видимости (Β§R.10.1.1). ΠŸΡ€Π°Π²ΠΈΠ»Π° доступа (Β§R.11) Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° имя ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² области Π΅Π³ΠΎ видимости. Волько ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²Π° доступа ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Ρ‹, начинаСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ элСмСнта пСрСчислСния.

Имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½Π΅ любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ класса, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ стоит унарная опСрация Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ области видимости :: (ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ уточняСтся Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ :: ΠΈΠ»ΠΈ опСрациями -β€Ί ΠΈΠ»ΠΈ .), Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π΅ΠΌ глобального ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ»ΠΈ элСмСнта пСрСчислСния, ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ°.

Имя, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ послС X:: ΠΈΠ»ΠΈ obj., Π³Π΄Π΅ obj Ρ‚ΠΈΠΏΠ° X ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° ссылка Π½Π° X, Π° Ρ‚Π°ΠΊΠΆΠ΅ имя, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ послС ptr-β€Ί, Π³Π΄Π΅ ptr Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° X, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‡Π»Π΅Π½Π° класса X ΠΈΠ»ΠΈ Ρ‡Π»Π΅Π½ΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ X класса. Помимо этого, Π² ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ptr-›имя ptr ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Y, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ функция operator-β€Ί(), описанная Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ptr-β€Ίoperator() Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС оказываСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° X (Β§R.13.4.6).

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

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

Имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ уточняСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· описанных Π²Ρ‹ΡˆΠ΅ способов, ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² статичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π΅ класса X, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ описано ΠΈΠ»ΠΈ Π² Ρ‚ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅, Π³Π΄Π΅ ΠΎΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΈΠ»ΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅, ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ статичСским Ρ‡Π»Π΅Π½ΠΎΠΌ класса X, ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ X класса, ΠΈΠ»ΠΈ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Имя Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈ Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ (Β§R.8.3), ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ области видимости, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΉ с наибольшим Π±Π»ΠΎΠΊΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π² частности, являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ). Имя Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π² Π΅Π΅ описании (Β§R.8.2.5), Π° Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ локальной области видимости, которая исчСзаСт сразу ΠΆΠ΅ послС описания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² находятся Π² области видимости, опрСдСляСмой Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ описания (Β§R.3.2) Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; Π² Π½ΠΈΡ… Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ нСстатичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса, ΠΈ ΠΎΠ½ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Β§R.8.2.6).

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€-ctor (Β§R.12.6.2) вычисляСтся Π² области видимости наибольшСго Π±Π»ΠΎΠΊΠ° конструктора, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π·Π°Π΄Π°Π½. Π’ частности, Π² Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

R.11 ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ

Π§Π»Π΅Π½ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

β€’ частным (private); это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ имя ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² функциях-Ρ‡Π»Π΅Π½Π°Ρ… ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΡ… класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ описан;

β€’ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ (protected); это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ имя ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² функциях-Ρ‡Π»Π΅Π½Π°Ρ… ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΡ… класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ описан, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² функциях-Ρ‡Π»Π΅Π½Π°Ρ… ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΡ… классов, ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ этому классу (см. Β§R.11.5);

β€’ ΠΎΠ±Ρ‰ΠΈΠΌ (public); это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ имя ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π§Π»Π΅Π½Ρ‹ класса, описанного со слуТСбным словом class, ΡΠ²Π»ΡΡŽΡ‚ΡΡ частными ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ. Π§Π»Π΅Π½Ρ‹ класса, описанного со слуТСбным словом struct ΠΈΠ»ΠΈ union, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

class X {

 int; // X:: частный ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ

};


struct S {

 int a; // S::a ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ

};

R.11.1 Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ доступа

Описания Ρ‡Π»Π΅Π½ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ снабТСны спСцификациСй доступа (Β§R.10):

спСцификация-доступа: список-Ρ‡Π»Π΅Π½ΠΎΠ² opt

БпСцификация-доступа Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΆΠΈΠ·Π½ΠΈ класса ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ появится другая спСцификация-доступа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

class X {

 int a; // X::a частный ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ: учитываСтся 'class'

public:

 int b; // X::b ΠΎΠ±Ρ‰ΠΈΠΉ

 int c; // X::c ΠΎΠ±Ρ‰ΠΈΠΉ

};

Допустимо любоС число спСцификаций доступа ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π² любом порядкС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

struct S {

 int a; // S::a ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ: учитываСтся `struct'

protected:

 int b; // S::b Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ

private:

 int c; // S::c частный

public:

 int d; // S:: d ΠΎΠ±Ρ‰ΠΈΠΉ

};

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ размСщСния Ρ‡Π»Π΅Π½ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ спСцификации-доступа, опрСдСляСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ (Β§R.9.2).

R.11.2 Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ доступа для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов

Если класс описан ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ (Β§R.10) ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ классу с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ спСцификации доступа public, Ρ‚ΠΎ Ρ‡Π»Π΅Π½Ρ‹ со спСцификациСй public ΠΈΠ»ΠΈ protected ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΡΠ²Π»ΡΡŽΡ‚ΡΡ соотвСтствСнно Ρ‡Π»Π΅Π½Π°ΠΌΠΈ с Ρ‚ΠΎΠΉ ΠΆΠ΅ спСцификациСй для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Если класс описан ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ спСцификации доступа private, Ρ‚ΠΎ Ρ‡Π»Π΅Π½Ρ‹ со спСцификациСй public ΠΈΠ»ΠΈ protected ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ со спСцификациСй private для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. ЧастныС Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ нСдоступными Π΄Π°ΠΆΠ΅ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для обСспСчСния доступа ΠΏΡ€ΠΈ описании Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ Π±Ρ‹Π»ΠΎ использовано описаниС friend.

Если для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π° спСцификация-доступа, Ρ‚ΠΎ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, Ссли ΠΎΠ½ описан ΠΊΠ°ΠΊ struct, прСдполагаСтся спСцификация public, Π° Ссли ΠΎΠ½ описан со слуТСбным словом class, Ρ‚ΠΎ - спСцификация private, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

class B {/*… */};

class D1: private B {/*… */};

class D2: public B {/*… */};

class D3: B {/*… */}; // `B' частный ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ

struct D4: public B {/*… */};

struct D5: private B {/*… */};

struct D6: B {/*… */}; // `B' частный ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ

Π—Π΄Π΅ΡΡŒ класс являСтся ΠΎΠ±Ρ‰ΠΈΠΌ (public) Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом для D2, D4 ΠΈ D6 ΠΈ частным (private) Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом для D1, D2 ΠΈ D5.

ОписаниС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΊΠ°ΠΊ private Π½Π΅ влияСт Π½Π° доступ ΠΊ статичСским Ρ‡Π»Π΅Π½Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Однако, Ссли ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ статичСскому Ρ‡Π»Π΅Π½Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° прСобразования ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π’ функциях-Ρ‡Π»Π΅Π½Π°Ρ… ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΡ… класса X ΠΌΠΎΠΆΠ½ΠΎ X* нСявно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° частный класс, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ нСпосрСдствСнно Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ X.

R.11.3 Описания доступа

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠ΅ имя, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‡Π»Π΅Π½Ρƒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π² части public ΠΈΠ»ΠΈ protected описания ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ называСтся описаниСм доступа.

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

class B {

 int a;

public:

 int b, c;

 int bf();

};


class D: private B {

 int d;

 public:

 B::c; // adjust access to `B::c'

 int e;

 int df();

};


int ef(D&);

Π’ΠΎ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ef ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π° c, e, ΠΈ df. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ функция df Ρ‡Π»Π΅Π½ класса D, Π² Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° b, c, bf, d, e ΠΈ df, Π½ΠΎ Π½Π΅ a. Ѐункция bf - Ρ‡Π»Π΅Π½ класса B ΠΈ Π² Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π»Π΅Π½Ρ‹ a, b, c ΠΈ bf.

Описания доступа Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ограничСния доступа ΠΊ Ρ‡Π»Π΅Π½Ρƒ, доступному Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для обСспСчСния доступа ΠΊ Ρ‡Π»Π΅Π½Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСдоступСн Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

class B {

public:

 int a;

private:

 int b;