Для Ρ‡Π΅Π³ΠΎ слуТит конструктор

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ конструкторы

Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ основныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, связанныС с написаниСм собствСнных конструкторов классов Π² Java.

Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π€ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор

Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π€ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор

ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… аспСктов программирования Π½Π° Java. Под созданиСм ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π΅ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим:

Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор. Π€ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ слуТит конструктор

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚, ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŒ Skillbox. ΠŸΠΈΡˆΠ΅Ρ‚ ΠΏΡ€ΠΎ Java.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ конструкторы классов

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, конструктор класса Cat называСтся Cat (). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этого конструктора Π±ΡƒΠ΄Π΅Ρ‚ создан Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Cat. ЦСль конструктора β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ использованиСм.

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” это строка Π²ΠΈΠ΄Π°:

Рассмотрим порядок создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ этой строкС выполняСтся Ρ‚Ρ€ΠΈ дСйствия:

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ строки:

Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ Π½Π΅ смоТСм с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ β€” вСдь ссылка Π½Π° Π½Π΅Π³ΠΎ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ сохранится.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΊΠΎΠ΄Π° пСрСмСнная murka ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Cat. Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ пСрСмСнная фактичСски Π½Π΅ содСрТит Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Java прСдставляСт собой ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ Π² памяти. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ пСрСмСнная murka ΠΏΠΎΠΊΠ° Π΅Ρ‰Ρ‘ Π½Π΅ ссылаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (содСрТит пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null).

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС ΠΊΠΎΠ΄Π° создаётся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Cat, Π° ссылка Π½Π° Π½Π΅Π³ΠΎ присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ murka. Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° пСрСмСнная murka оказываСтся ассоциированной с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½ΡƒΠΆΠ½ΠΎ сначала ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡ… ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΡ… исходноС состояниС. Π—Π°Ρ‚Π΅ΠΌ ΠΊ этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ взглянСм Π½Π° ΠΊΠΎΠ΄ класса Cat (Π±Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²):

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ всС ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² классС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ конструктора ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³ΠΎΡ‚ΠΎΠ² ΠΊ использованию. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ошибок Π½Π΅ появится.

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

Для справки: Для числовых Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ являСтся Π½ΡƒΠ»Π΅Π²ΠΎΠ΅, для Ρ‚ΠΈΠΏΠ° boolean β€” логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false, Π° для ссылочных Ρ‚ΠΈΠΏΠΎΠ² β€” пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.

Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ свой собствСнный конструктор, конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠΌ конструктор ΠΈΠ· класса Cat ΠΈ попытаСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‡Π΅Ρ€Π΅Π· new Cat (), Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ создан, Π½ΠΎ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² классС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π‘Ρ€Π°Π·Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° дСйствия ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ слСдуСт. Если поля ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нСявно, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° становится ΠΌΠ΅Π½Π΅Π΅ понятной.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ конструкторы

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

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

НапримСр, конструкторы Π½ΠΈΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ классС ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ конструкторы Π½ΠΈΠΆΠ΅ для компилятора ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ ΠΈ Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Ρ‚ΠΈΠΏ, количСство ΠΈ порядок слСдования ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹):

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ конструктора класса Cat с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ:

Как Π²ΠΈΠ΄Π½ΠΎ, Π² этих конструкторах ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° повторяСтся, Ρ‡Ρ‚ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибки: вСдь Ссли Π½Π°ΠΌ потрСбуСтся ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ конструктор, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ внСсти измСнСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Для этого примСняСтся Π²Ρ‹Π·ΠΎΠ² конструктора ΠΈΠ· конструктора с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ссылку Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ конструктору ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ конструктора ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² this () β€” Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Если ΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½ конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΈΡ… ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π² скобках.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this для Π²Ρ‹Π·ΠΎΠ²Π° Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ конструктора ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ β€” Π½ΡƒΠΆΠ½ΠΎ лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠ΄ для конструирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π’Π°ΠΆΠ½ΠΎ: Π²Ρ‹Π·ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ конструктора всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкой Π² конструкторС.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈΠ· конструкторов:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: НСсколько слов насчёт ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this. Бинтаксис языка Java Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра (класса). Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС говорят, Ρ‡Ρ‚ΠΎ локальная пСрСмСнная ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ скрываСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ экзСмпляра. ΠŸΡ€ΠΈ этом доступ ΠΊ скрытой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ экзСмпляра обСспСчиваСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ конструктора класса Cat ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ присваиваниС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π² конструктор ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ класса:

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΈΠΌΡ‘Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Π§Ρ‚ΠΎΠ±Ρ‹, взглянув Π½Π° этот ΠΊΠΎΠ΄ спустя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Π²Ρ‹ сразу ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ здСсь происходит.

Но Π² Ρ†Π΅Π»ΠΎΠΌ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΠΈ довольно ΠΎΠ±ΡˆΠΈΡ€Π½Π°Ρ Ρ‚Π΅ΠΌΠ°.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Основная Π·Π°Π΄Π°Ρ‡Π° конструкторов β€” ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΈΠΌ ΠΈ установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΏΠΎΠ»Π΅ΠΉ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Но Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ установки значСния для ΠΏΠΎΠ»Π΅ΠΉ. Π­Ρ‚ΠΎ явная инициализация ΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Явная инициализация β€” это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ полю ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π½ΠΈΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π—Π΄Π΅ΡΡŒ присваиваниС выполняСтся Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° конструктора. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ оказываСтся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π»ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” нСзависимо ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° конструктора класса.

Π‘Π»ΠΎΠΊΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ выглядят Ρ‚Π°ΠΊ:

Π’Π°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ выполняСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° создаётся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля id задаётся Π² Π±Π»ΠΎΠΊΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ конструктор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания экзСмпляра класса. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ выполняСтся Π±Π»ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° вслСд Π·Π° Π½ΠΈΠΌ β€” Ρ‚Π΅Π»ΠΎ конструктора.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π±Π»ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ этому классу. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

Π§Ρ‚ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠΈ способов ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ класса Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ конструктора:

1. Если Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΊΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ конструктора вызываСтся Π²Ρ‚ΠΎΡ€ΠΎΠΉ конструктор, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ конструктор выполняСтся с прСдоставляСмыми Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

3. ВыполняСтся Ρ‚Π΅Π»ΠΎ конструктора.

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

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ статичСскоС ΠΏΠΎΠ»Π΅ слСдуСт, задавая Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ статичСский Π±Π»ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Π² случаС, Ссли для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ статичСского поля трСбуСтся слоТный ΠΊΠΎΠ΄.

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

Для изучСния β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всС элСмСнты, описанныС Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅. А ΠΈΠΌΠ΅Π½Π½ΠΎ:

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

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

Π£Ρ€ΠΎΠΊ β„–116. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

На этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим конструкторы Π² языкС Π‘++.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

Когда всС Ρ‡Π»Π΅Π½Ρ‹ класса (ΠΈΠ»ΠΈ структуры) ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс (ΠΈΠ»ΠΈ структуру) Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ uniform-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (Π² C++11):

Однако, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ сдСлаСм ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ, Ρ‚ΠΎ большС Π½Π΅ смоТСм ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ смысл: Ссли Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π·Π°ΠΊΡ€Ρ‹Ρ‚Π°), Ρ‚ΠΎ Π²Ρ‹ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π΅Ρ‘ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Как Ρ‚ΠΎΠ³Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ? Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструкторы.

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

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², конструкторы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΡ… имСнования:

конструкторы всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ имя, Ρ‡Ρ‚ΠΎ ΠΈ класс (ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΈ Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистры);

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

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (ΠΈΠ»ΠΈ содСрТит ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС ΠΈΠΌΠ΅ΡŽΡ‚ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), называСтся конструктором ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Он вызываСтся, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ значСния для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. НапримСр:

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

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ (C++)

ΠŸΡ€ΠΈ нСобходимости конструкторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ элСмСнта. Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивный способ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² класса, Ρ‡Π΅ΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ‚Π΅Π»Π΅ конструктора. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ класс Box с трСмя ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ конструкторами. ПослСдниС Π΄Π²Π° списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ элСмСнтов use:

ΠŸΡ€ΠΈ объявлСнии экзСмпляра класса компилятор Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ конструктор для Π²Ρ‹Π·ΠΎΠ²Π° Π½Π° основС ΠΏΡ€Π°Π²ΠΈΠ» Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ:

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

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

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‡Π»Π΅Π½ класса; ΠΎΠ½ инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. АргумСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² конструктора, Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ std:: initializer_list T >.

const Ρ‡Π»Π΅Π½Ρ‹ ΠΈ Ρ‡Π»Π΅Π½Ρ‹ ссылочного Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ².

Π’ спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сдСланы Π²Ρ‹Π·ΠΎΠ²Ρ‹ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… конструкторов Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π΄ΠΎ выполнСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ конструктора.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ элСмСнтов. Если Π² классС Π½Π΅ объявлСн Π½ΠΈ ΠΎΠ΄ΠΈΠ½ конструктор, компилятор прСдоставляСт нСявный inline конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

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

МоТно Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ компилятору ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСявный конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ:

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

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

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Most Vexing Parse (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² конструктора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Π² связи с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ срСдства синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° C++ ΠΎΡ‚Π΄Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ объявлСниям ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ дСйствиями, Π΄Π°Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ обрабатываСтся ΠΊΠ°ΠΊ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ досадной Parse.

Π’ случаС явного объявлСния конструкторов компилятор Π½Π΅ прСдоставляСт конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

Если Ρƒ класса Π½Π΅Ρ‚ конструктора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса Π΄Π²ΡƒΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок. НапримСр, Π² прСдставлСнном Π²Ρ‹ΡˆΠ΅ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° массив Boxes Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Однако ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ списков ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Box:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠΏΠΈΠΈ

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

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΏΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… сигнатур:

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ конструктора ΠΊΠΎΠΏΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания копирования (=). Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ конструкторы присваивания ΠΈ копирования ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания копирования.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² конструктор ΠΊΠΎΠΏΠΈΠΈ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° копирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС C2280: ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ссылки Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ пСрСмСщСния

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

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

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

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ написании Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… конструкторов пСрСмСщСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ конструкторы пСрСмСщСния ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания пСрСмСщСния (C++).

Π―Π²Π½ΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ конструкторы

конструкторы constexpr

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²

Π—Π°Ρ‚Π΅ΠΌ создайтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Box ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π―Π²Π½Ρ‹Π΅ конструкторы

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

Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Box ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Или ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Box:

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ прСобразования ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‡Π°Ρ‰Π΅ всСго ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ, Π½ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ ошибкам Π² вашСм ΠΊΠΎΠ΄Π΅. Π’ качСствС ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ explicit ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π² конструкторС (ΠΈ опрСдСляСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…) для прСдотвращСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° нСявного прСобразования Ρ‚ΠΈΠΏΠΎΠ²:

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ создания

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ выполняСт свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС.

Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструкторы Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Π² порядкС объявлСния.

Если класс являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов, конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Если класс ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ»ΠΈ наслСдуСт Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ класса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ привязку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊ ΠΊΠΎΠ΄Ρƒ.

ВыполняСт вСсь ΠΊΠΎΠ΄ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ конструкторы Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² конструкторС для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса. Π‘Π½Π°Ρ‡Π°Π»Π° вызываСтся конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π² порядкС ΠΈΡ… появлСния Π² объявлСнии класса. ПослС этого вызываСтся конструктор ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Если Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π² конструкторС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ конструктора Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Если конструктор создаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ выполняСтся Π² порядкС, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ созданию.

ΠžΡ‚ΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ ΠΊΠΎΠ΄ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ конструктора.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Ρ‡Π»Π΅Π½Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Π² порядкС, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ объявлСнию.

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

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ конструкторы ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ агрСгатная инициализация

Ссли конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ являСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, Π½ΠΎ доступСн для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пустыС Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² /std:c++17 Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ Π² Visual Studio 2017 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ рСакция Π½Π° событиС Π² C++14:

Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ c++ 17 Π² Visual Studio 2017 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях Π² /std:c++17 Ρ€Π΅ΠΆΠΈΠΌΠ΅:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ для классов с нСсколькими наслСдованиями

Если класс являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов, конструкторы Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ пСрСчислСны Π² объявлСнии ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

Π”Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ конструкторы

Π”Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ классС для выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько конструкторов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΎΠ΄Π½ΠΎΠΌ конструкторС ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Box (int) Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Box (int, int, int):

ΠžΠ±ΡŠΠ΅ΠΊΡ‚, созданный конструкторами, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ инициализируСтся сразу послС выполнСния любого конструктора. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π”Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ конструкторов.

НаслСдованиС конструкторов (C++11)

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ конструкторы ΠΎΡ‚ прямого Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ объявлСния, using ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Visual Studio 2017 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсий: инструкция Π² /std:c++17 Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях прСдоставляСт всС конструкторы ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΡƒΡŽ сигнатуру для конструкторов Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Ссли Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ ΠΈΠ»ΠΈ конструкторы, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наслСдуСмыС конструкторы.

Π¨Π°Π±Π»ΠΎΠ½ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ всС конструкторы ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ°, Ссли этот Ρ‚ΠΈΠΏ опрСдСляСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс:

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов, Ссли Ρƒ этих Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов Π΅ΡΡ‚ΡŒ конструкторы с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ сигнатурами.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ составныС классы

ΠšΠ»Π°ΡΡΡ‹, содСрТащиС Ρ‡Π»Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΠ° класса, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ составными классами. ΠŸΡ€ΠΈ создании Ρ‡Π»Π΅Π½Π° Ρ‚ΠΈΠΏΠ° класса составного класса конструктор вызываСтся ΠΏΠ΅Ρ€Π΅Π΄ собствСнным конструктором класса. Если Ρƒ содСрТащСгося класса Π½Π΅Ρ‚ конструктора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² конструкторС составного класса. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ StorageBox ΠΏΡ€ΠΈ присвоСнии Ρ‚ΠΈΠΏΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½Π° m_label Π½ΠΎΠ²ΠΎΠ³ΠΎ класса Label Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ m_label Π² конструкторС StorageBox :

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

ИспользованиС конструкторов (Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° C#)

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

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Taxi опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простого конструктора. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new создаСт экзСмпляр этого класса. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Taxi вызываСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Если класс Π½Π΅ являСтся статичСским, компилятор C# выдСляСт классам Π±Π΅Π· конструкторов ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры классов. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ БтатичСскиС классы ΠΈ Ρ‡Π»Π΅Π½Ρ‹ статичСских классов.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляров класса ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ, сдСлав конструктор Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ конструкторы.

Начиная с C# 10 Ρ‚ΠΈΠΏ структуры ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ явный конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ»Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π’ΠΈΠΏΡ‹ структур.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° основС structs (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ всС встроСнныС числовыС Ρ‚ΠΈΠΏΡ‹) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π’ связи с этим Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для Ρ‚ΠΈΠΏΠ° значСния Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Оба класса ΠΈ structs ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ конструкторы, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΈΠ»ΠΈ base. ΠšΠ»Π°ΡΡΡ‹ ΠΈ structs ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ нСсколько конструкторов; для опрСдСлСния конструктора Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΡ… Π½ΠΈΡ… Π½Π΅ трСбуСтся. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΎΡ‚ класс ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, воспользовавшись ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово base для Π²Ρ‹Π·ΠΎΠ²Π° конструктора Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса вызываСтся ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ Π±Π»ΠΎΠΊΠ°. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово base ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΈ Π±Π΅Π· Π½ΠΈΡ…. Π›ΡŽΠ±Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для конструктора ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для base ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ выраТСния. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ base.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ конструктора:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΡƒ public, private, protected, internal, protected internal ΠΈΠ»ΠΈ private protected. Π­Ρ‚ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ класса смогут ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ класс. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ статичСским, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static. БтатичСскиС конструкторы Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ автоматичСски нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ доступом ΠΊ статичСским полям ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² статичСского класса. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ БтатичСскиС конструкторы.

БпСцификация языка C#

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ экзСмпляров ΠΈ БтатичСскиС конструкторы Π² Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ языка C#. БпСцификация языка являСтся ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ источником ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ синтаксисС ΠΈ использовании языка C#.

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

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

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