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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Освой ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π‘++ Π·Π° 21 дСнь.Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 34

Автор ДТСсс Π›ΠΈΠ±Π΅Ρ€Ρ‚ΠΈ

Π’ строкС 58 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Cat с ΠΈΠΌΠ΅Π½Π΅ΠΌ Frisky. Π’ этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ класс Cat ΠΈΠΌΠ΅Π΅Ρ‚ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² строкС 58 Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ пСрСдаСтся, компилятор зафиксируСт ΠΎΡˆΠΈΠ±ΠΊΡƒ.


ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:Если Π² классС ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ конструктор, компилятор Π² этом случаС Π½Π΅ станСт ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ со своСй стороны Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ конструктора Π΄Π°ΠΆΠ΅ Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ coΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΠΎΠΌΡƒ конструктору. Π’ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаях компилятор ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ сообщСниС ΠΎΠ± ошибкС.


Π’ строкС 60 вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Bark(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» объявлСн, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΎΠΌ Π΅Π³ΠΎ использовании ΠΈ Ρ€Π΅Ρ‡ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

Π’ строкС 61 дСлаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ itsAge Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 7. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрСмСнная itsAge относится ΠΊ числу Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ², Ρ‚ΠΎ ΠΏΡ€ΠΈ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ здСсь Π±ΡƒΠ΄Π΅Ρ‚ зафиксировано ΠΏΠΎΠΊΡƒΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ‡Π°ΡΡ‚Π½ΡƒΡŽ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ класса.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ для отслСТивания ошибок Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ компилятор

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

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

Π“Π΄Π΅ слСдуСт Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠ³Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ объявлСния классов ΠΈ опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

КаТдая функция, объявлСнная Π² классС, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ называСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Подобно Π΄Ρ€ΡƒΠ³ΠΈΠΌ функциям, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса состоит ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов C++ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π» Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .c ΠΈΠ»ΠΈ .cpp. Π’ этой ΠΊΠ½ΠΈΠ³Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .cpp, Π½ΠΎ Π²Π°ΠΌ стоит Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ прСдпочтСния собствСнного компилятора.


ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: МногиС компиляторы ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .c содСрТат ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС Π½Π° языкС Π‘, Π° Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .cpp β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C++. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ .cpp свСдСт ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ нСдоразумСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° C++.


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

НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ объявлСниС класса Cat Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ CAT, hpp, Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса β€” Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ CAT .cpp. Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π² ΠΊΠΎΠ΄ Ρ„Π°ΠΉΠ»Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .cpp. Для этого Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Ρ„Π°ΠΉΠ»Π΅ CAT.cpp ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°:

#include "Cat.hpp"

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ компилятору ввСсти содСрТимоС Ρ„Π°ΠΉΠ»Π° CAT.hpp Π² Π΄Π°Π½Π½ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ include Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ пСрСписали с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² это мСсто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΠ΅ содСрТимоС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ компиляторы Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру Π±ΡƒΠΊΠ² ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ соотвСтствия написания ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»Π° Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ #include ΠΈ Π½Π° дискС.

Π—Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .hpp ΠΎΡ‚ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ cpp, Ссли ΠΌΡ‹ всС Ρ€Π°Π²Π½ΠΎ собираСмся Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π½Π°Π·Π°Π΄ Π² Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹? Как ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² вашСго класса Π½Π΅ Π²ΠΎΠ»Π½ΡƒΡŽΡ‚ подробности Π΅Π³ΠΎ выполнСния. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ нСбольшого Ρ„Π°ΠΉΠ»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с подробностями выполнСния этого класса. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ содСрТимоС Ρ„Π°ΠΉΠ»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .hpp Π²Π°ΠΌ захочСтся Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ Π² ΠΎΠ΄ΠΈΠ½, Π° Π² нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.


ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:ОбъявлСниС класса сообщаСт компилятору, Ρ‡Ρ‚ΠΎ прСдставляСт собой этот класс, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ½ содСрТит ΠΈ ΠΊΠ°ΠΊΠΈΠΌΠΈ функциями располагаСт. ОбъявлСниС класса называСтся Π΅Π³ΠΎ интСрфСйсом, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ сообщаСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с классом. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранится Π² Ρ„Π°ΠΉΠ»Π΅ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .hpp, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся Ρ„Π°ΠΉΠ»ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.

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

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ с подстановкой

МоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ подстановку ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова inline Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ это дСлалось с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ функциями. Для этого ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово inline Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚ΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ подставляСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° GetWeight() ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:


inline intCat::GetWeight()

{

return itsweight; // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-Ρ‡Π»Π΅Π½ Weight

}


МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² объявлСниС класса, Ρ‡Ρ‚ΠΎ автоматичСски Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ подставляСмой:


class Cat

{

   public:

   int GetWeight() { return itsWeight; } // подставляСмая функция

   void SetWeight(int aWeight);

};


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° синтаксис опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetWeight(). Π’Π΅Π»ΠΎ подставляСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ начинаСтся сразу ΠΆΠ΅ послС объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ послС ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой. Подобно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° начинаСтся с ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобки ΠΈ оканчиваСтся Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ значСния Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚, ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько ΠΈΠ½Π°Ρ‡Π΅:

class Cat

{

   public:

   int GetWeight() const

   {

      return itsWeight;

   } // подставляСмая функция

   void SetWeight(int aWeight);

};


Π’ листингах 6.6 ΠΈ 6.7 вновь создаСтся класс Cat, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС объявлСниС класса содСрТится Π² Ρ„Π°ΠΉΠ»Π΅ CAT.hpp, Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ β€” Π² Ρ„Π°ΠΉΠ»Π΅ CAT.cpp. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² листингС 6.7 ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ класса ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Meow() ΡΠ²Π»ΡΡŽΡ‚ΡΡ подставляСмыми.

Листинг 6.6. ОбъявлСниС класса CAT Π² Ρ„Π°ΠΉΠ»Π΅ CAT.hpp

1: #include <iostream.h>

2: class Cat

3; {

4:   public:

5:   Cat (int initialAge);

6:   ~Cat();

7:   int GetAge() const { return itsAge;) // подставляСмая функция!

8:   void SetAge (int age) { itsAge = age;} // подставляСмая функция!

9:   void Meow() const { cout << "ΠœΡΡƒ.\n";} // подставляСмая функция!

10:  private:

11:  int itsAge;

12: };


Листинг 6.7. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ масса Cat Π² Ρ„Π°ΠΉΠ»Π΅ CAT.cpp

1: // ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования подставляСмых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

2: // ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°

3:

4: #include "cat.hpp" // Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°!

5:

6:

7: Cat::Cat(int initialAge) //конструктор

8: {

9:    itsAge = initialAge;

10: }

11:

12: Cat::~Cat() // дСструктор, Π½Π΅ выполняСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий

13: {

14: }

15:

16: // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΡˆΠΊΡƒ, устанавливаСм Π΅Π΅ возраст, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ

17: // Π΅ΠΉ ΠΌΡΡƒΠΊΠ½ΡƒΡ‚ΡŒ, сообщаСм Π΅Π΅ возраст, Π·Π°Ρ‚Π΅ΠΌ снова "мяукаСм" ΠΈ измСняСм возраст кошки.

18: int main()

19: {

20:    Cat Frisky(5);

21:    Frisky.Meow();

22:    cout << "Frisky is Π° cat who is ";

23:    cout << Frisky.QetAge()  << " years old.\n";

24:    Frisky.Meow();

25:    Frisky.SetAge(7);

26:    cout << "Now Frisky is " ;