Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠšΠ»Π°ΡΡΡ‹ Π² C++ β€” ΡƒΡ€ΠΎΠΊ 10

Π’Π΅ΡΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΡ€ состоит ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π“ΠΎΡ€ΠΎΠ΄Π° состоят ΠΈΠ· Ρ€Π°ΠΉΠΎΠ½ΠΎΠ², Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π°ΠΉΠΎΠ½Π΅ Π΅ΡΡ‚ΡŒ свои названия ΡƒΠ»ΠΈΡ†, Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡƒΠ»ΠΈΡ†Π΅ находятся ΠΆΠΈΠ»Ρ‹Π΅ Π΄ΠΎΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ состоят ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия

ΠšΠ»Π°ΡΡΡ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ состоят ΠΈΠ· свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Бвойства β€” это Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса. Π’ нашСм случаС, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса являСтся студСнт, Π° Π΅Π³ΠΎ свойствами β€” имя, фамилия, ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΈ срСдний Π±Π°Π»Π».

Ѐункция calculate_average_ball() просто Π΄Π΅Π»ΠΈΡ‚ сумму всСх ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΡ†Π΅Π½ΠΎΠΊ Π½Π° ΠΈΡ… количСство.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа public ΠΈ private

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ всС свойства класса, Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ β€” Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ВсС дСйствия с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ свойствами класса Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ класса. Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ посрСдством ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² этого класса. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ get_average_ball() для получСния срСднСй ΠΎΡ†Π΅Π½ΠΊΠΈ студСнта, ΠΈ set_average_ball() для выставлСния этой ΠΎΡ†Π΅Π½ΠΊΠΈ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΡ‡Π΅Ρ‚Π° успСваСмости студСнтов

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создайтС Ρ„Π°ΠΉΠ» main.cpp со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса Students Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ студСнта. Если ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΠΈ всСм ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°ΠΌ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…. ИспользованиС классов ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°.

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ

ВынСсСм Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ всСх ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» students.cpp.

А Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ students.h оставим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ называСтся абстракциСй Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наш класс Π² своСм ΠΊΠΎΠ΄Π΅, Π΅ΠΌΡƒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ высчитываСтся срСдний Π±Π°Π»Π». Он просто Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ calculate_average_ball() ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π½Π΅ вникая Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π½Π΅Π³ΠΎ, Π° Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π΅ Π² Π² ΠΊΡƒΡ‡Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ указатСля. И ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π΅Π΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ это Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² содСрТимоС Ρ„Π°ΠΉΠ»Π° main.cpp.

ΠŸΡ€ΠΈ создании статичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, для доступа ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ свойствам, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ опСрация прямого обращСния β€” Β« . Β» (символ Ρ‚ΠΎΡ‡ΠΊΠΈ). Если ΠΆΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выдСляСтся посрСдством указатСля, Ρ‚ΠΎ для доступа ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ свойствам ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ косвСнного обращСния β€” Β« -> Β».

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈ дСструктор класса

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

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ, Ссли ΡƒΡ‡Π΅Π½ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ сСбя вСсти, ΠΈ воврСмя ΡΠ΄Π°Π²Π°Ρ‚ΡŒ домашниС задания. А Π½Π° Β«Π½Π΅Ρ‚Β» ΠΈ суда Π½Π΅Ρ‚ πŸ™‚

ДСструктор класса вызываСтся ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Имя дСструктора Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈΠΌΠ΅Π½ΠΈ конструктора, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ ставится Π·Π½Π°ΠΊ Ρ‚ΠΈΠ»ΡŒΠ΄Ρ‹

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C, C# ΠΈ Java

Π£Ρ€ΠΎΠΊΠΈ программирования, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΡΡ‚Π°Ρ‚ΡŒΠΈ, исходники, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ совСты

ΠžΠ‘Π’ΠžΠ ΠžΠ–ΠΠž ΠœΠžΠ¨Π•ΠΠΠ˜ΠšΠ˜! Π’ послСднСС врСмя Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях ΡƒΡ‡Π°ΡΡ‚ΠΈΠ»ΠΈΡΡŒ случаи прСдлоТСния ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π² написании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΡ‚ Π»ΠΈΡ†, ΠΏΡ€ΠΈΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ сайтом vscode.ru. ΠœΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ пишСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π² посторонних Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… Π’Πš. Для связи с Π½Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ эти ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹: vscoderu@yandex.ru, https://vk.com/vscode

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ класс Π² ООП

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

Когда Π’Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… языков (Π‘ΠΈ, Pascal, Basic) ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ (C#, Java, C++), ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ – это ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ своё ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это написаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³Π»Π°Π²Π½ΠΎΠΉ (main). Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… ООП Π²Π°ΠΌ придётся ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ абстрактно ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с классами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°. Казалось Π±Ρ‹, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² – это Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ абстрактно?

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ класс?

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ (ООП) – класс это основной элСмСнт, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ осущСствляСтся конструированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Класс содСрТит Π² сСбС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Класс Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ описываСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°. Как ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, класс содСрТит свой Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ характСристик. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ называСтся ΠΏΠΎΠ»Π΅ класса (ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅). Π’Π°ΠΊΠΆΠ΅ класс способСн ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ своими характСристиками (полями) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса (ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… языках). Рассмотрим Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ.

ΠžΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌΡΡ, Ρ‡Ρ‚ΠΎ данная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π’ Π½Π΅ΠΉ Π½Π΅ рассматриваСтся наслСдованиС, абстрактныС классы ΠΈ Ρ‚.Π΄.

БозданиС класса

Π§Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ? Π’ частности, это:

НапишСм класс Car (Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ) Π½Π° C# (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π½Π° Java):

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π£Ρ€ΠΎΠΊ β„–113. ΠšΠ»Π°ΡΡΡ‹, ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

Обновл. 13 БСн 2021 |

Π₯отя язык C++ прСдоставляСт ряд Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, char, int, long, float, double ΠΈ Ρ‚.Π΄.), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π²Π°Π΅Ρ‚ достаточно для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ слоТных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° этих простых Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ.

ΠšΠ»Π°ΡΡΡ‹

Одной ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… особСнностСй языка C++ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ собствСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ пСрСчислСния ΠΈ структуры ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания собствСнных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, структура для хранСния Π΄Π°Ρ‚Ρ‹:

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ структуры β€” это Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ (Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ) ΠΌΠΈΡ€ программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Π’ C++11 ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ структуру ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Для Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Ρ‚Ρ‹ Π½Π° экран (Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈ Π½Π΅ Ρ€Π°Π·, ΠΈ Π½Π΅ Π΄Π²Π°) Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Для опрСдСлСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² языкС C++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class. ИспользованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class опрСдСляСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… β€” класс.

Π’ языкС C++ классы ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° структуры, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. ЀактичСски, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ структура ΠΈ класс ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Ρƒ:

ЕдинствСнным сущСствСнным ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ здСсь являСтся public β€” ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π² классС (ΠΎ Π½Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅).

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ объявлСниС структуры, объявлСниС класса Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ памяти. Для использования класса Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ этого Ρ‚ΠΈΠΏΠ° класса:

Π’ языкС C++ пСрСмСнная класса называСтся экзСмпляром (ΠΈΠ»ΠΈ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌΒ») класса. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int x ) ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ памяти для этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DateClass today ) ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ памяти для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ классов

Помимо хранСния Π΄Π°Π½Π½Ρ‹Ρ…, классы ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ! Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ, Ρ‚Π°ΠΊ ΠΈ Π²Π½Π΅ класса. Пока Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ… Π²Π½ΡƒΡ‚Ρ€ΠΈ класса (для простоты), ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… Π²Π½Π΅ класса β€” рассмотрим нСсколько ΠΏΠΎΠ·ΠΆΠ΅.

Класс Date с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Ρ‚Ρ‹:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ структура. Однако Π΅ΡΡ‚ΡŒ нСсколько ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ. Π’ вСрсии DateStruct Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ структуры нСпосрСдствСнно Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ print() Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Если Π±Ρ‹ ΠΌΡ‹ этого Π½Π΅ сдСлали, Ρ‚ΠΎ функция print() Π½Π΅ Π·Π½Π°Π»Π° Π±Ρ‹, ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ структуры DateStruct Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ. Нам Ρ‚ΠΎΠ³Π΄Π° Π±Ρ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ явно ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‡Π»Π΅Π½Ρ‹ структуры Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Рассмотрим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° print() Π΅Ρ‰Π΅ Ρ€Π°Π·:

По сути, связанный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСявно пСрСдаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π΅Π³ΠΎ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ нСявным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ пСрСдаСтся нСявный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ здСсь являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с функциями, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ явно (Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²). А для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Ρƒ нас всСгда Π΅ΡΡ‚ΡŒ нСявный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса!

ИспользованиС прСфикса m_ (Π°Π½Π³Π». Β«mΒ» = Β«membersΒ») для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ программисты ΠΏΠΈΡˆΡƒΡ‚ ΠΈΠΌΠ΅Π½Π° классов с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ: ΠŸΠΈΡˆΠΈΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° классов с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹.

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с использованиСм класса:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния!

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ структурах Π² C++

Π’ языкС CΠΈ структуры ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ связанных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ПослС проСктирования классов (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class) Π² языкС Π‘++, Π‘ΡŒΡ‘Ρ€Π½ Бтрауструп Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»ΡΠ» ΠΎ Ρ‚ΠΎΠΌ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ структуры (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ унаслСдованы ΠΈΠ· языка Π‘ΠΈ) ΠΈΠΌΠ΅Π»ΠΈ связанныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ПослС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ ΠΎΠ½ Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct, вмСсто class, ΠΈ всё Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ!

МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈ мСня) ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, справСдливо ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ класс Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ очистку памяти послС сСбя (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, класс, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, освободит Π΅Ρ‘ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ уничтоТСния самого класса), Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со структурами β€” нСбСзопасно. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct для структур, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class для опрСдСлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ объСдинСния ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct для структур, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C++ ΠΏΠΎΠ»Π½Π° классов, созданных для нашСго удобства. std::string, std::vector ΠΈ std::array β€” это всё Ρ‚ΠΈΠΏΡ‹ классов! ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого ΠΈΠ· этих Ρ‚ΠΈΠΏΠΎΠ², Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса. А ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с использованиСм этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ООП – ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ ОсвобоТдСния ΠŸΠ°Π»Π΅ΡΡ‚ΠΈΠ½Ρ‹.
АббрСвиатура.

Π Π΅Π·ΠΎΠ½Π½Ρ‹ΠΉ вопрос – ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ ΠΏΠΎΠ·Π΄Π½ΠΎ приступаСм ΠΊ знакомству с ООП? Π― Ρ‚ΠΎΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π»Π°Π²Ρ‹ ΠΊΠ½ΠΈΠ³ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Ρ‹ Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ ΠΎΡ‚ ΠΈΡ… излоТСния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Но, сказавши Β«Π°Β», слСдовало Π±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ Β«Π±Β», Ρ‚.Π΅. ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ООП, Π° это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ совсСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:

эта тСхнология ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° созданиС ΡƒΠΆΠ΅ достаточно Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², хотя ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ части ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ классов) всС Ρ€Π°Π²Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ структурного программирования. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π½Π° ΠΌΠΎΠΉ консСрвативный взгляд, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ООП, Π½Π°Π΄ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ слоТности Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ;

ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π‘ΠΈ прСкрасно ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ срСдствами классичСского Π‘ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ΅;

всС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ Π³Π»Π°Π²Ρ‹ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ нСбольшими ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная нотация (ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΠΊ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²) Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°;

ООП – это постановка процСсса программирования «с Π½ΠΎΠ³ Π½Π° Π³ΠΎΠ»ΠΎΠ²ΡƒΒ», (ΠΈΠ»ΠΈ с Π³ΠΎΠ»ΠΎΠ²Ρ‹ Π½Π° Π½ΠΎΠ³ΠΈ), Π° это Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π² сСрСдинС излоТСния ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°;

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ‚Π°ΠΊΠΎΠΉ «монстр» ΠΊΠ°ΠΊ Π‘ΠΈ++, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠΉΡΡ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ Π² сСбС всС ΠΈ вся, ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ совсСм ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ, излишнС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ ΠΈ довольно Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΊ знакомству с Ρ‚ΠΎΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ срСдами ООП, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Java ΠΈΠ»ΠΈ C#.

10.1 ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ классы

ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠ΅Ρ‚ΠΎΠ΄, класс: опрСдСлСния ΠΈ свойства

«Классами Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ большиС Π³Ρ€ΡƒΠΏΠΏΡ‹ людСй, Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΠΎ ΠΈΡ… мСсту Π² историчСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Β­Π½ΠΎΠΉ систСмС общСствСнного производства, ΠΏΠΎ ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ) ΠΊ срСдствам произ­водства, ΠΏΠΎ ΠΈΡ… Ρ€ΠΎΠ»ΠΈ Π² общСствСнной ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€ΡƒΠ΄Π°, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎ, ΠΏΠΎ способам получСния ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ Ρ‚ΠΎΠΉ Π΄ΠΎΠ»ΠΈ общСствСнного богатства, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚Β» ЛСнинскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ классов.

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

ΠŸΡ€ΠΎΠΏΠΈΡΠ½Ρ‹Π΅ истины ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°

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

для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° создаСтся экзСмпляр Π΄Π°Π½Π½Ρ‹Ρ…;

ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой СдинствСнный экзСмпляр ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² сСгмСнтС ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ выполняСтся для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (раздСляСтся ΠΈΠΌΠΈ);

ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ выполняСтся, идСнтифицируСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° this, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΌ контСкст Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

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

public: void F() < a++; >// void A::F(A *this) < this->a++; >

Ссли элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… класса ΠΈΠΌΠ΅ΡŽΡ‚ взаимосвязанныС значСния, Ρ‚ΠΎ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ установлСнныС для Π½ΠΈΡ… соглашСния;

Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… класса ссылаСтся Π½Π° внСшниС структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΏΡ€ΠΈ синтаксичСском ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ связанной структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-ΠΊΠΎΠΏΠΈΠΈ (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π΅ копию ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ – см. «конструктор копирования»;

Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… рСсурсов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°), Ρ‚ΠΎ дСйствия класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
рис. 101-1. ΠžΠ±ΡŠΠ΅ΠΊΡ‚: Π³Ρ€Π°Π½ΠΈΡ†Π° отвСтствСнности транслятора ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

double * pd ; // ВнутрСнняя Π‘Π” – Π΄ΠΈΠ½. массив коэффициСнтов

public : void add ( double D 2[], int n 2)<> // ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ закрытости – ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ – внутрСнняя Π‘Π”

void add ( poly & T )<> // ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса

По ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ интСрфСйс класса (Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ максимально Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π΅Π½, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒΡΡ Π² Π»ΡŽΠ±Ρ‹Ρ… комбинациях, давая ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ возмоТностСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ совСт: ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ многообразия Ρ„ΠΎΡ€ΠΌ прСдставлСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π§Π΅ΠΌ ΠΈΡ… мСньшС, Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ. НапримСр, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ динамичСский массив, Ρ‡Π΅ΠΌ NULL-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с классом стСпСнного ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ° «пустой» ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ динамичСским массивом с СдинствСнным Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ коэффициСнтом.

double * pd ; // ВнутрСнняя Π‘Π” – Π΄ΠΈΠ½. массив коэффициСнтов

public : poly () < n =0; pd = NULL ; >// ΠΠ΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ: NULL – отсутствиС массива

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹Β«Π›ΠΎΠΆΠ°ΡΡŒ ΡΠΏΠ°Ρ‚ΡŒ, программист ставит рядом Π΄Π²Π° стакана: ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»Π½Ρ‹ΠΉ – Ссли Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΈΡ‚ΡŒ, ΠΈ ΠΎΠ΄ΠΈΠ½ пустой – Ссли Π½Π΅ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚Β». АнСкдот Π² Ρ‚Π΅ΠΌΡƒ.

// Класс стСпСнного ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ° – Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ класса (объявлСниС)

int n; // ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°

double *pd; // динамичСский массив коэффициСнтов

double & get ( int k ); // ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π° коэффициСнт

void add ( poly & T ); // слоТСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (1=1+2)

void mul ( poly & T ); // ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (1=1+2)

Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€. ДСструктор

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ цСлостности ΠΈ коррСктности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ – это Π½Π΅Ρ‡Ρ‚ΠΎ большСС, Ρ‡Π΅ΠΌ просто пСрСмСнная. ΠŸΡ€ΠΈ создании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΅Π΅ инициализация вовсС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ установлСниСм Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ состояния (инициализация Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти, рСсурсов, установлСниС связСй ΠΈ Ρ‚.Π΄.). АналогичныС ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ дСйствия Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ освобоТдСниСм памяти. Π‘ этой Ρ†Π΅Π»ΡŒΡŽ Π² классС вводятся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ – конструкторы ΠΈ дСструктор. Π˜Ρ… ΠΈΠΌΠ΅Π½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΠΎΠ² для Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, дСструктор ΠΆΠ΅ всСгда ΠΎΠ΄ΠΈΠ½ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ имя, ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½Π½ΠΎΠ΅ символом «

«. Если конструктор ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‚ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° послС Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² скобках значСния фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

// Класс стСпСнного ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ° – конструкторы ΠΈ дСструктор

int n; // ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°

double *pd; // динамичСский массив коэффициСнтов

n=0; // с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ коэффициСнтом

n=m; // с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ коэффициСнтами

load(n0,p); > // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ load

load(T.n, T.pd); > // (конструктор копирования)

ΠœΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° конструктора ΠΈ дСструктора опрСдСляСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ создания ΠΈ уничтоТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

Π’ Π‘ΠΈ++ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса. ΠŸΡ€ΠΈ этом конструктор ΠΈ дСструктор автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ†ΠΈΠΊΠ»Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete для указатСля Π½Π° массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡ‚ΡŒ скобками.

poly a,b(6), c (3, D ); // БтатичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ – конструкторы

// пустой ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌ, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ размСрности ΠΈ ΠΈΠ· массива

poly *p,* q ; // Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

poly c,d( c ); // АвтоматичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

p = new poly ; // ДинамичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

q = new poly [ n ]; // ДинамичСский массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

delete p; // Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ динамичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

delete [] q ; // Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ динамичСского массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

> // Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ автоматичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: процСсс конструирования Β«Π²Π»ΠΎΠΆΠ΅Π½Β» Π² процСсс Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ памяти ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ вызываСтся сразу ΠΆΠ΅ послС выдСлСния памяти, Π° дСструктор – ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ освобоТдСниСм.

A(int a1) // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

Класс – структурированный Ρ‚ΠΈΠΏ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ доступом

«Настоящий» классы Π² Π‘ΠΈ++ отличаСтся ΠΎΡ‚ структурированного Ρ‚ΠΈΠΏΠ° ΠΎΠ΄Π½ΠΎΠΉ СдинствСнной ΠΌΠ΅Π»ΠΎΡ‡ΡŒΡŽ: Π² классС вводятся ограничСния доступа. ЕстСствСнно, это синтаксичСскиС ограничСния, ΠΈ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ простым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° класса. Π­Ρ‚ΠΎ Β«Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅Β» ограничСния, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·ΠΎΠ½Ρ‹ отвСтствСнности программистов – Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° класса ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ класса, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΡΡ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

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

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ класс отличаСтся ΠΎΡ‚ структурированного Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом class (вмСсто struct ) ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π΄Π²ΡƒΡ… областСй доступа Π² Ρ‚Π΅Π»Π΅ класса:

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

открытая (общая) Ρ‡Π°ΡΡ‚ΡŒ класса допускаСт любой доступ, Π² Ρ‚ΠΎΠΌ числС ΠΈ внСшний. Она всСгда явно обозначаСтся ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ public.

// Класс стСпСнного ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°

int n; // ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°

double *pd; // динамичСский массив коэффициСнтов

public:… // ΠΌΠ΅Ρ‚ΠΊΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ части

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ размСщСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ части класса Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ€Π΅ΠΆΠ΅, Π½ΠΎ Ρ‚ΠΎΠΆΠ΅ обоснованы:

Π² ΠΎΠ±Ρ‰Π΅ΠΉ части класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ класса Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ катастрофичСским послСдствиям (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ†Π²Π΅Ρ‚ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹). ЕстСствСнно, Ρ‡Ρ‚ΠΎ класс Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этих Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ пСрСрисовкС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹);

Π² Π»ΠΈΡ‡Π½ΠΎΠΉ части класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ самого класса. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия, вынСсСнныС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π»ΠΈΠ±ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий.

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

ОбъявлСниС друТСствСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдставляСт собой ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, пСрСопрСдСляСмой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ имя класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ доступ, ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½Π½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом friend.

// ΠšΠ»Π°ΡΡΡ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, друТСствСнныС классу A

int x; // Личная Ρ‡Π°ΡΡ‚ΡŒ класса

. // ВсС Β«Π΄Ρ€ΡƒΠ·ΡŒΡΒ» ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ x

friend void C::operator+( А &);

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹Β«Π”Ρ€ΡƒΠ³ – это Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΎ Π»Π΅Π·Ρ‚ΡŒ Ρ‚Π΅Π±Π΅ Π² Π΄ΡƒΡˆΡƒ (Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ) Π² любоС врСмя».

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ классу ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠΎΠ², сразу ΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ большСй части ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· друТСствСнности. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΡΡ‚ΡŒ ΠΆΠ΅ касаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Ρ… (Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° динамичСский массив), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², связанных с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ динамичСской ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ размСрности ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°.

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

// Класс стСпСнного ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°

int n; // ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°

double *pd; // динамичСский массив коэффициСнтов

void load(int n0, double p[])<

n=n0; // Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ массива

double *pd1=new double[n1+1];

for (; i n 1; i ++) pd 1[ i ]=0;// ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ коэффициСнты нулями

delete []pd; // ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ старый массив

pd=pd1; // ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π·Π° старый

> // ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ пСрСраспрСдСляСтся

public :… // ΠΌΠ΅Ρ‚ΠΊΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ части

Рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄, интСрСсный с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ закрытости. ΠœΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ коэффициСнт ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ ΠΊΠ°ΠΊ ΠΏΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ записи. Π₯отя это Β«ΠΏΡ€ΠΈΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Β» доступ ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ использованиС этой ссылки Β«Π²ΠΎ Π²Ρ€Π΅Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΡƒΒ» ΠΈ доступ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π΅ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ коэффициСнтам Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большого искусства ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ Π½Π΅ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (ΠΏΠΎ ошибкС). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ бСзопасной.

// Класс стСпСнного ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°

int n; // ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌΠ°

double *pd; // динамичСский массив коэффициСнтов

if ( k k > n ) return foo ; // Π½Π° «Π»Π΅Π²ΡƒΡŽ» ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

ВзаимодСйствиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π² ООП

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π’ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ООП Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ рСгулярный Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€: Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, класс ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² сСбС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, схСма взаимодСйствия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ иная. ΠœΠ΅Ρ‚ΠΎΠ΄ (функция), Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ нСпосрСдствСнно. Для Π½Π°Ρ‡Π°Π»Π° ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΈ Ρ‚.Π΄.), послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· извСстных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, структура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ опрСдСляСтся взаимодСйствиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов ΠΌΠ΅ΠΆΠ΄Ρƒ собой, Π° процСсс выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выраТаСтся Ρ„Ρ€Π°Π·ΠΎΠΉ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΌΠ΅Ρ‚ΠΎΠ΄-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β».

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
рис.101-4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΌΠ΅Ρ‚ΠΎΠ΄-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β»

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ проСктирования Π² Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ООП

Β· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ конструкций языка, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ², объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° класса;

Β· Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ класса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ объявлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ со списком Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ), ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΈΠΊΠ΅ упоминаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΊΡ‚ Π΅Π³ΠΎ наличия (с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ интСрфСйсом). Π’ΠΎΠ³Π΄Π° Π² Ρ„Π°ΠΉΠ»Π΅ Ρ‚Π΅Π»Π° класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, содСрТащСС Π΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ Ρ‚Π΅Π»ΠΎ. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ повторяСт объявлСниС с ΠΎΠ΄Π½ΠΈΠΌ малСньким ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ: имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° даСтся Π² ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π² Π²ΠΈΠ΄Π΅ имя_класса::имя_ΠΌΠ΅Ρ‚ΠΎΠ΄Π°;

Β· Ρ„Π°ΠΉΠ» Ρ‚Π΅Π»Π° класса Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ свой Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ include ;

Β· для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс ΠΈΠ»ΠΈ main ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ include ;

Β· всС ΠΈΠΌΠ΅Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π΅Π»Π° класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚;

int a; // Π”Π°Π½Π½Ρ‹Π΅ класса

void add ( A &); // ОбъявлСниС (ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ) ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

A mul ( A &); // ОбъявлСниС (ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ) ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

ЕстСствСнно, Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Β«ΡΠ²Π°Π»ΠΈΡ‚ΡŒ всС классы Π² ΠΎΠ΄Π½Ρƒ ΠΊΡƒΡ‡ΡƒΒ», Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ это ΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π½Π΅ эстСтично.

Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠΌ

1. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Π΄Ρ€ΠΎΠ±ΡŒ, прСдставлСнная Ρ†Π΅Π»ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ, числитСлСм ΠΈ Π·Π½Π°ΠΌΠ΅Π½Π°Ρ‚Π΅Π»Π΅ΠΌ.

4. Π¦Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, прСдставлСнноС Π² Π²ΠΈΠ΄Π΅ массива Π΅Π³ΠΎ простых ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»Π΅ΠΉ (ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π°Π΅Ρ‚ это число).

5. Π¦Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, прСдставлСнноС Π² Π²ΠΈΠ΄Π΅ массива остатков ΠΎΡ‚ дСлСния Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n 6. Π’Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° плоскости, прСдставлСнный Π² полярной систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (Π΄Π»ΠΈΠ½Π°, ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°).

8. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ размСрности, прСдставлСнная динамичСским массивом ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ динамичСскиС массивы).

9. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ размСрности, прСдставлСнная динамичСским массивом, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ располоТСны ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

10. РазрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ размСрности, Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ коэффициСнты прСдставлСны динамичСским массивом с элСмСнтами (x,y,v) ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

11. РазрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ размСрности, Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ коэффициСнты прСдставлСны односвязным списком с элСмСнтами (x,y,v) ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

12. РазрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ размСрности, Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ коэффициСнты прСдставлСны двусвязным цикличСским списком с элСмСнтами (x,y,v) ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

13. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ, элСмСнтами ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹Π΅ числа. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ объСдинСния ΠΈ пСрСсСчСния мноТСств, добавлСния элСмСнта, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, разности мноТСств.

14. Π¦Π΅Π»Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ со Π·Π½Π°ΠΊΠΎΠΌ Π²ΠΎ внСшнСй Ρ„ΠΎΡ€ΠΌΠ΅ прСдставлСния Π² Π²ΠΈΠ΄Π΅ строки Ρ†ΠΈΡ„Ρ€ Π² прямом ΠΊΠΎΠ΄Π΅. Π—Π½Π°ΠΊ прСдставлСн ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом Π΄Π°Π½Π½Ρ‹Ρ….

15. Π¦Π΅Π»Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ со Π·Π½Π°ΠΊΠΎΠΌ Π²ΠΎ внСшнСй Ρ„ΠΎΡ€ΠΌΠ΅ прСдставлСния Π² Π²ΠΈΠ΄Π΅ строки Ρ†ΠΈΡ„Ρ€ Π² прямом ΠΊΠΎΠ΄Π΅. Π—Π½Π°ΠΊ прСдставлСн ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ (0 /1).

16. Π¦Π΅Π»Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ со Π·Π½Π°ΠΊΠΎΠΌ Π²ΠΎ внСшнСй Ρ„ΠΎΡ€ΠΌΠ΅ прСдставлСния Π² Π²ΠΈΠ΄Π΅ строки Ρ†ΠΈΡ„Ρ€ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

17. Π¦Π΅Π»Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии (динамичСский массив Π±Π°ΠΉΡ‚ΠΎΠ²) Π² прямом ΠΊΠΎΠ΄Π΅. Π—Π½Π°ΠΊ прСдставлСн ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом Π΄Π°Π½Π½Ρ‹Ρ….

18. Π¦Π΅Π»Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии (динамичСский массив Π±Π°ΠΉΡ‚ΠΎΠ²) Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *