ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

НС Windows Π΅Π΄ΠΈΠ½ΠΎΠΉ: ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ кроссплатформСнныС прилоТСния с GUI Π½Π° C#

На C# ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ красивыС прилоТСния, Π½ΠΎ Π΄ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΈΡ… ΠΏΠΎΡ€ β€” Π½Π΅ для всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. РассказываСм, ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для всСх ОБ сразу.

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

Пока Π΅ΡΡ‚ΡŒ Xamarin, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Windows 10 ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств. Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ графичСскиС интСрфСйсы для Linux ΠΈΠ»ΠΈ Mac OS?

Π’ΡƒΡ‚ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΎΡ‚ сторонних Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

ΠŸΠΈΡˆΠ΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π² свободноС врСмя создаСт ΠΈΠ³Ρ€Ρ‹. ΠœΠ΅Ρ‡Ρ‚Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ свою ΡΡ‚ΡƒΠ΄ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»Π°ΠΌΠΏΠΎΠ²Ρ‹Π΅ RPG.

Какой Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ

МнС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ 2 Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ популярных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° (ΠΎΠ±Π° основаны Π½Π° Skia ):

Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΎΠ±Π°, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ показался ΠΌΠ½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ: Π² Π½Ρ‘ΠΌ Π΅ΡΡ‚ΡŒ язык Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° MVVM, быстрая установка, Π»Ρ‘Π³ΠΊΠΈΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с WPF. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π²Ρ‹Π±Ρ€Π°Π» Π΅Π³ΠΎ.

Как Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AvaloniaUI

Для Π½Π°Ρ‡Π°Π»Π° ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ сСбС Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

Π’ Π½Ρ‘ΠΌ находятся ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ для создания прилоТСния с AvaloniaUI. Если Π²Ρ‹ Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ git, Ρ‚ΠΎ просто скачайтС содСрТимоС ΠΈ распакуйтС ΠΊΡƒΠ΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π—Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ консоль ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Она установит ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ для создания прилоТСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, добавились Π»ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² консоли ΠΏΠ°ΠΏΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅:

Π‘ΡƒΠ΄Π΅Ρ‚ создано ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с использованиСм MVVM. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ вся докумСнтация ΠΏΠΎ AvaloniaUI написана с использованиСм этого ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°, поэтому ΠΏΡ€ΠΎΡ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Ρ‘ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° AvaloniaUI

Π£ вас Π±ΡƒΠ΄ΡƒΡ‚ созданы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ

Π‘Π½Π°Ρ‡Π°Π»Π° посмотрим Π² Ρ„Π°ΠΉΠ» Program.cs Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅:

Нас интСрСсуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ AppMain(). Π’ Π½Ρ‘ΠΌ создаётся ΠΎΠΊΠ½ΠΎ (MainWindow) с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ DataContext (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для привязки Π΄Π°Π½Π½Ρ‹Ρ…), Π° ΠΏΠΎΡ‚ΠΎΠΌ это ΠΎΠΊΠ½ΠΎ запускаСтся.

Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свою Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния. НапримСр, ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² конструктор MainWindowViewModel(). Однако ΠΏΠ΅Ρ€Π΅Π΄ этим Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

Π£ нас ΠΎΡ‡Π΅Π½ΡŒ простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, поэтому ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ всю Π»ΠΎΠ³ΠΈΠΊΡƒ прямо Π² MainWindowViewModel.cs. Π’Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ пространство ΠΈΠΌΡ‘Π½ ReactiveUI, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² AvaloniaUI ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° MVVM:

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

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π² C#

Π£ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ C# часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйс ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΆΠ΅ ссылкС Π² поисковикС. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ статСй смысл интСрфСйса Ρ€Π°Π·ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Β«Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Β» ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ класс, ΠΊΠ°ΠΊΠΈΠ΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. НапримСр Ρƒ нас Π΅ΡΡ‚ΡŒ интСрфСйс:

БоотвСтствСнно, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ интСрфСйс, Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° int GetForecast(int value) ΠΈ свойство Size.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° минимальная. Если Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒ интСрфСйс ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ всС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ. Π Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ класса ΠΈ Ρ‚ΠΎΠ³Π΄Π° интСрфСйс ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Подводя ΠΈΡ‚ΠΎΠ³ этой части, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ интСрфСйс рСализуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ СдинствСнном классС, Ρ‚ΠΎ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΡŒΡ‚Π΅ врСмя Π½Π° Π½Π΅Π³ΠΎ. Он просто Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
Π‘Ρ€Π°Π·Ρƒ послС ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° мСня ΠΎΠ±Ρ€ΡƒΡˆΠΈΠ»ΠΈ ΠΌΠΎΡ€Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΈ, сначала я пытался ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ, Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ понял, Ρ‡Ρ‚ΠΎ смысла Π½Π΅Ρ‚. ВсС ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΈ ΡƒΠΏΠΈΡ€Π°ΡŽΡ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я написал Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π°Π±Π·Π°Ρ†Π΅ ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ слоТныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π³Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ классов, всякиС ссылки Ρ‚ΡƒΠ΄Π°-сюда, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅. Π― Π½Π°Π²Π΅Ρ€Π½ΠΎ Π±Ρ‹Π» Π½Π΅ ΠΏΡ€Π°Π², Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΏΠΎΠ΄Π²Π΅Π» ΠΈΡ‚ΠΎΠ³ вступлСния. Но ΡΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ интСрфСйс Π½ΡƒΠΆΠ΅Π½ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда. Если Ρƒ вас ваш Π»ΠΈΡ‡Π½Ρ‹ΠΉ (ΠΈΠ»ΠΈ просто Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ большой) ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ планируСтся ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈ ΠΊΡ‚ΠΎ Π½Π΅ ссылаСтся ΠΈ, самоС Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ интСрфСйсов Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚. И Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ истории, Ρ‡Ρ‚ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» интСрфСйс ΠΈ ΠΎΠ±Ρ€Π΅Π» бСссмСртиС. Если Π±Ρ‹ интСрфСйс Π±Ρ‹Π» Π½ΡƒΠΆΠ΅Π½ Π²Π΅Π·Π΄Π΅, ΠΎΠ½ Π±Ρ‹Π» Π±Ρ‹ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ класса.

Π­Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс Π½Π΅ для связки ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. По этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ возмоТности интСрфСйса Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ интСрСснСС. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ для Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° это ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ возмоТности ΠΏΠΎ части гибкости ΠΊΠΎΠ΄Π°.

НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° класса:

Π­Ρ‚ΠΎ Π΄Π²Π° совсСм Ρ€Π°Π·Π½Ρ‹Ρ… класса, Π½ΠΎ ΠΏΡƒΡΡ‚ΡŒ Ρƒ Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅, Ρ‚.Π΅. ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π» с Π½ΠΈΠΌΠΈ ΠΎΠ±ΠΎΠΈΠΌΠΈ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс, Ρ‚.Π΅. ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ эти классы ΠΊΠ°ΠΊ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Π½ΠΈΡ…:

Как Π²ΠΈΠ΄Π½ΠΎ, пСрСмСнная value ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetForecast ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий ΠΏΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ‚.ΠΏ.

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

МоТно ΠΏΠΎΠΉΡ‚ΠΈ Π΅Ρ‰Π΅ дальшС ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив (ΠΈΠ»ΠΈ list) Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

А ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ сумму всСх свойств Size:

Π£ объявлСния Ρ‡Π΅Ρ€Π΅Π· интСрфСйс Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ нСдостаток: Π²Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² интСрфСйсС ΠΈ самом классС. Если ваш класс унаслСдован ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, Ρ‚ΠΎ для доступа ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ придСтся Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°:

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ фокус с интСрфСйсам ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ классС Π΄Π²Π° интСрфСйса с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠΎ сигнатурС, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π― Π½Π΅ знаю какая ΠΎΡ‚ этого ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ практичСская польза ΠΊΡ€ΠΎΠΌΠ΅ ΡƒΠΆΠ΅ упомянутой, Π½ΠΎ Ссли Π²Π΄Ρ€ΡƒΠ³ Π²Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вынСсти ΠΈΡ… Π² интСрфСйсы.

НапримСр Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ интСрфСйс:

И создадим Π½ΠΎΠ²Ρ‹ΠΉ класс, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Π° интСрфСйса:

Π­Ρ‚ΠΎ называСтся явной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ интСрфСйса. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… интСрфСйсов ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа (β€œpublic” ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ доступны ΠΊΠ°ΠΊ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°.

Как Π²ΠΈΠ΄Π½ΠΎ, это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ выглядит слишком Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько ΠΈΠ½Π°Ρ‡Π΅:

bad ΠΈ good Π±ΡƒΠ΄ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° third, Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹Π΅ интСрфСйсы. ΠŸΡ€ΠΈΠ²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях это сдСлаСт ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ.

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

Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ со всСми ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ здСсь: ссылка

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

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ GUI Π½Π° чистом C?

Освоил язык Π‘ Π² Ρ‚ΠΎΠΉ ΠΌΠ΅Ρ€Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΌΠΎΠΉ IT-Π’Π£Π—, ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ понимаю Π΅Π³ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ.
Π’ связи с этим Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свои ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½ΠΈΡ… GUI.

Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°Ρ… ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ совСтов ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ, поэтому ΠΈ написал сюда:
ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ писал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘ с качСствСнным графичСским интСрфСйсом ΠΈ ΠΊΠ°ΠΊ это дСлаСтся?

ΠžΡ†Π΅Π½ΠΈΡ‚ΡŒ 2 коммСнтария

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

Π‘Π΅Ρ€Π΅Ρ‚Π΅ Qt, осваиваСтС C++ Π° Π½Π° сях ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

p.s. ΡΠΈΡˆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ консоль, ΠΈΠ±ΠΎ это Ρ‚Ρ€Ρƒ.

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с интСрфСйсом Π½Π° с

Π’Π°ΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ.

Если Π²ΠΈΠ½Π΄Π° Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Visual Studio ΠΈ Windows Forms.
ΠŸΡ€Π°Π²Π΄Π° Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Ρ‚ΡŒ WinAPI, Ρ‚ΠΊ VS рассчитан Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с с++.
И ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ придСтся Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€ΡƒΠΊΠ°ΠΌΠΈ. Окошко с ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π² VS создаСтся Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π° Π²ΠΎΡ‚ с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½ΠΈΠΌ событий Π½Π°ΠΌΡƒΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ.Π’ΠΊ язык си ΠΌΠΎΠΆΠ΅Ρ‚ лишь ΠΈΠΌΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΎΠΏ, Π° ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ слоТная Ρ‚Π΅ΠΌΠ°.

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Qt Creator. Он Ρ‚ΠΎΠΆΠ΅ прСдставляСт возмоТности ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ gui. Но эта ide Ρ‚ΠΎΠΆΠ΅ Π·Π°Ρ‚ΠΎΡ‡Π΅Π½Π° ΠΏΠΎΠ΄ с++ ΠΈ ООП ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ. Π₯отя ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΉ Π½Π° си ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΡ€ΠΈΠ»Π°ΠΆΡƒΡ…ΠΈ с gui, Π½ΠΎ с костылями.

БСйчас для создания gui Π½Π° чистом си ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ интСрфСйсов Glade gtk. Он сам Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ написан Π½Π° си. Π’ Π½Ρ‘ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚ΠΊΠ° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² GTK+ которая Ρ‚ΠΎΠΆΠ΅ написана Π½Π° чистом си.
ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ поддСрТиваСтся GNOME Foundation.

ОписаниС Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ создаваСмого Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ интСрфСйса сохраняСтся Π² Ρ„Π°ΠΉΠ»Π°Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° XML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π²ΠΎ врСмя исполнСния с использованиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° GtkBuilder.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с си ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Code Blocks IDE, ΠΎΠ½Π° Ρƒ мСня установлСна ΠΈ Π² Π²ΠΈΠ½Π΄Π΅ ΠΈ Π² линуксС.
ΠŸΡ€ΠΈ создании ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° GTK+ ΠΈ Ρ„Π°ΠΉΠ» xml c описаниСм Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² созданных Π² Glade.

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° интСрфСйсных классов Π½Π° Π‘++

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹Π΅ классы вСсьма ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° C++. Но, ΠΊ соТалСнию, ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π° основС интСрфСйсных классов часто Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ошибки. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описано, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйсныС классы, рассмотрСно нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано использованиС ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ шаблона класса ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π° основС интСрфСйсных классов.

ОглавлСниС

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹ΠΌ классом называСтся класс, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ состоящий Π² основном ΠΈΠ· чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ позволяСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‚ интСрфСйса β€” ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ интСрфСйсный класс, β€” Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС создаСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ опрСдСляСтся функция-Ρ„Π°Π±Ρ€ΠΈΠΊΠ°. Π”Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ скрыты ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ рСализуСтся истинная инкапсуляция, нСвозмоТная ΠΏΡ€ΠΈ использовании ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ класса. ΠŸΡ€ΠΎ интСрфСйсныС классы ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρƒ Π‘ΠΊΠΎΡ‚Ρ‚Π° ΠœΠ΅ΠΉΠ΅Ρ€ΡΠ° [Meyers2]. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹Π΅ классы Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ классами-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ.

ИспользованиС интСрфСйсных классов позволяСт ΠΎΡΠ»Π°Π±ΠΈΡ‚ΡŒ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ частями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, сниТаСтся врСмя компиляции/сборки. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹Π΅ классы Π΄Π΅Π»Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ простой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π³ΠΈΠ±ΠΊΠΈΡ…, динамичСских Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ Π²ΠΎ врСмя исполнСния. ИспользованиС интСрфСйсных классов Π² качСствС интСрфСйса (API) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (SDK) ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ совмСстимости.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹Π΅ классы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ достаточно ΡˆΠΈΡ€ΠΎΠΊΠΎ, с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс (API) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (SDK), интСрфСйс ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (plugin’ов) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. МногиС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Π‘Π°Π½Π΄Ρ‹ Π§Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… [GoF] СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсных классов. К интСрфСйсным классам ΠΌΠΎΠΆΠ½ΠΎ отнСсти COM-интСрфСйсы. Но, ΠΊ соТалСнию, ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π° основС интСрфСйсныx классов часто Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ошибки. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ навСсти ΡΡΠ½ΠΎΡΡ‚ΡŒ Π² этом вопросС.

1. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, созданиС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ описываСтся ряд особСнностСй C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π΄ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ для интСрфСйсных классов.

1.1. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹

Если программист Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ класса ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ списка β€” конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ присваивания, дСструктор, β€” Ρ‚ΠΎ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π·Π° Π½Π΅Π³ΠΎ. Π‘++11 Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΊ этому списку ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠΉ конструктор ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎ присваивания. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹. Они Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ условия, спСцифичныС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это использованиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ достаточно скрытым (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ наслСдования). Если трСбуСмая функция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сгСнСрирована, выдаСтся ошибка. (Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΎΠ½ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅.) Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ компилятором Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΈ встраиваСмыми.

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… функциях-Ρ‡Π»Π΅Π½Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² [Meyers3].

1.2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² β€” основныС подробности

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² new/delete β€” это типичная опСрация Β«Π΄Π²Π° Π² ΠΎΠ΄Π½ΠΎΠΌΒ». ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ new сначала выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ вызываСтся конструктор. Если конструктор выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ выдСлСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete всС происходит Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС: сначала вызываСтся дСструктор, ΠΏΠΎΡ‚ΠΎΠΌ освобоТдаСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ. ДСструктор Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Если ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ сначала выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для всСго массива. Если Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ вызываСтся конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива начиная с Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ. Если ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ конструктор выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ для всСх созданных элСмСнтов массива вызываСтся дСструктор Π² порядкС, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Ρƒ конструктора, Π·Π°Ρ‚Π΅ΠΌ выдСлСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся. Для удалСния массива Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete[] (называСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete для массивов), ΠΏΡ€ΠΈ этом для всСх элСмСнтов массива вызываСтся дСструктор Π² порядкС, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Ρƒ конструктора, Π·Π°Ρ‚Π΅ΠΌ выдСлСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! НСобходимо Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, удаляСтся ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ массив. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π°Π΄ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π½Π΅ΡƒΠΊΠΎΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ всС, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ: ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ‚.Π΄. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. [Meyers2].

Π›ΡŽΠ±ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete бСзопасно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Π½ΡƒΠ»Π΅Π²ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ описании Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅. Для Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (встроСнныС Ρ‚ΠΈΠΏΡ‹, структуры Π² стилС Π‘), конструктор ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, Π° дСструктор Π² любом случаС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π΄Π΅Π» 1.6.

1.3. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ доступа дСструктора

1.4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅

Если ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new создал ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete для Π΅Π³ΠΎ удалСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅. ΠžΠ±Ρ€Π°Π·Π½ΠΎ говоря, Β«ΠΏΠΎΠ»ΠΎΠΆΠΈ Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ взял». Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстно, см., Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [Sutter/Alexandrescu]. ΠŸΡ€ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ этого ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ «нСстыковка» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ выдСлСния ΠΈ освобоТдСния памяти, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

1.5. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅

1.6. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΌ объявлСнии класса

warning C4150: deletion of pointer to incomplete type ‘X’; no destructor called

Битуация эта Π½Π΅ Π½Π°Π΄ΡƒΠΌΠ°Π½Π°, ΠΎΠ½Π° Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ использовании классов Ρ‚ΠΈΠΏΠ° ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля ΠΈΠ»ΠΈ классов-дСскрипторов. Π‘ΠΊΠΎΡ‚Ρ‚ ΠœΠ΅ΠΉΠ΅Ρ€Ρ разбираСтся с этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² [Meyers3].

2. Чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ абстрактныС классы

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ интСрфСйсных классов базируСтся Π½Π° Ρ‚Π°ΠΊΠΈΡ… понятиях Π‘++ ΠΊΠ°ΠΊ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ абстрактныС классы.

2.1. Чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ дСструктора, см. Ρ€Π°Π·Π΄Π΅Π» 2.3), Π½ΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов.

Чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Π“Π΅Ρ€Π± Π‘Π°Ρ‚Ρ‚Π΅Ρ€ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ для этой возмоТности [Shutter].

2.2. АбстрактныС классы

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

2.3. Чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ дСструктор

Π’ рядС случаСв чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ цСлСсообразно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ дСструктор. Но Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ особСнности.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ дСструктора ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.4.

3. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹Π΅ классы

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

3.1. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ интСрфСйсного класса Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ интСрфСйсного класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Π²Π΅ схСмы: Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ, ΠΊΠΎΠ³Π΄Π° нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… классов Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ интСрфСйсный класс, ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ, ΠΊΠΎΠ³Π΄Π° интСрфСйсный класс являСтся ΠΊΠΎΡ€Π½Π΅ΠΌ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π³ΠΈΠ±Ρ€ΠΈΠ΄Ρ‹.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ интСрфСйсных классов являСтся ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрфСйса ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с интСрфСйсным классом, рСализация Π΅ΠΌΡƒ Π½Π΅ доступна.

3.2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ΠΠ΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ класса Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйсный класс, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ класс Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ доступСн, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструктор нСльзя, поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция-Ρ„Π°Π±Ρ€ΠΈΠΊΠ°, опрСдСляСмая Π½Π° сторонС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚Π° функция ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° интСрфСйсный класс. Ѐункция-Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ статичСским Ρ‡Π»Π΅Π½ΠΎΠΌ интСрфСйсного класса, Π½ΠΎ это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ класса-Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, сам ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрфСйсным) ΠΈΠ»ΠΈ свободной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Ѐункция-Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ сырой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйсный класс, Π° ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ рассмотрСн Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… 3.3.4 ΠΈ 4.3.2.

3.3. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

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

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ основных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

3.3.1. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete

3.3.2. ИспользованиС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π΄Π°ΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Π½ΠΎ это являСтся ошибкой. Для Π΅Π΅ прСдотвращСния Π² интСрфСйсном классС достаточно ΠΈΠΌΠ΅Ρ‚ΡŒ пустой ΠΈΠ»ΠΈ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ дСструктор (см. Ρ€Π°Π·Π΄Π΅Π» 1.3). ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ достаточно сильно замаскированным, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, стандартныС ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ для удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Β«Π·Π°Ρ€Ρ‹Ρ‚Β» Π² ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ дСструктор позволяСт ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ всС Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π½Π° этапС компиляции.

3.3.3. ИспользованиС внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

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

3.3.4. АвтоматичСскоС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля

3.4. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ управлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ экзСмпляра класса Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

3.5. Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° копирования

ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ присваивания Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ, Π½ΠΎ нСльзя ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ присваивания всСгда являСтся ΠΏΠ°Ρ€Π½Ρ‹ΠΌ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ Π² ΠΏΠ°Ρ€Π΅ с ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ конструктором. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ компилятором ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, бСссмыслСн, ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. ВСорСтичСски ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ присваиваниС являСтся Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ, подробности ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² [Meyers1]. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ присваиваниС выглядит вСсьма нССстСствСнно: доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ класса Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйсный класс, поэтому присваиваниС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания Π»ΡƒΡ‡ΡˆΠ΅ всСго Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ, Π° ΠΏΡ€ΠΈ нСобходимости ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ сСмантики ΠΈΠΌΠ΅Ρ‚ΡŒ Π² интСрфСйсном классС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ присваиваниС ΠΌΠΎΠΆΠ½ΠΎ двумя способами.

3.6. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ интСрфСйсного класса

Часто конструктор интСрфСйсного класса Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ. Π’ этом случаС компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ наслСдования (см. Ρ€Π°Π·Π΄Π΅Π» 1.1). Π­Ρ‚ΠΎΡ‚ конструктор ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ, хотя достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ. Если Π² интСрфСйсном классС ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор объявлСн ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ( =delete ), Ρ‚ΠΎ гСнСрация компилятором конструктора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ подавляСтся, ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ конструктор. ЕстСствСнно Π΅Π³ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ( =default ). Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, объявлСниС Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ конструктора ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ всСгда. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ находится Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.4.

3.7. Π”Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ взаимодСйствиС

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

3.8. Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

Если интСрфСйсный класс ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ счСтчик ссылок, Ρ‚ΠΎ цСлСсообразно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ стандартныС ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ написанный для Ρ‚Π°ΠΊΠΎΠ³ΠΎ случая, это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ достаточно Π»Π΅Π³ΠΊΠΎ.

3.9. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ интСрфСйсных классов ΠΊΠ°ΠΊ const. Одним ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… достоинств интСрфСйсных классов являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ максимально ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ отдСлСния интСрфСйса ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ограничСния, связанныС с ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π°, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ класса Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

3.10. COM-интСрфСйсы

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

3.11. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹Π΅ классы ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

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

4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ интСрфСйсного класса ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

4.1. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹ΠΉ класс

Π’Π°ΠΊ ΠΊΠ°ΠΊ интСрфСйсный класс Ρ€Π΅Π΄ΠΊΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ цСлСсообразно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс.

Π’ΠΎΡ‚ дСмонстрационный интСрфСйсный класс.

4.2. Класс Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

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

4.3. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

4.3.1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

ΠŸΡ€ΠΈ создании ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ. Класс-ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‡Π΅Π½ΡŒ простой (ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½ Π² IBase ):

Для std::unique_ptr<> класс-ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ являСтся ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ:

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ класс-ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ содСрТит Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·ΠΌΠ΅Ρ€ UniquePtr Ρ€Π°Π²Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ сырого указатСля.

Π’ΠΎΡ‚ шаблон Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ:

Π’ΠΎΡ‚ шаблон прСобразования ΠΈΠ· сырого указатСля Π² ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ:

А этот ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ благодаря Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌΡƒ дСструктору Π½Π΅ компилируСтся (конструктор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ):

Описанная схСма ΠΈΠΌΠ΅Π΅Ρ‚ нСдостаток: Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌΡƒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ. Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ: ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ удалСния Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ, Π° класс-ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ находится Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.4.

4.3.2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° сторонС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° сторонС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ этом случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² качСствС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΠΈ-Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ std::shared_ptr<> ΠΈ Π² Π΅Π³ΠΎ конструктор ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° класс Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ дСструктор, Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ (ΠΈ Π½Π΅ трСбуСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция для удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ). Π’ этом случаС конструктор std::shared_ptr<> (Π° это шаблон) создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ базируСтся Π½Π° Ρ‚ΠΈΠΏΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ примСняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Для std::shared_ptr<> ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅Π»ΡŒ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав экзСмпляра ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля (Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π΅Π³ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ°) ΠΈ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-удалитСля Π½Π΅ влияСт Π½Π° Ρ‚ΠΈΠΏ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля. Π’ этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ.

Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ являСтся Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с использованиСм шаблона std::make_shared<>() :

4.4. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ рСализация Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса

Чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ дСструктор Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Delete() Π½Π΅ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция, поэтому Π΅Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ.

5. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсных классов

5.1 Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Если ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, доступный Ρ‡Π΅Ρ€Π΅Π· интСрфСйсныС классы, проСктируСтся ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Exception ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Класс Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ IException :

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ конструктора Exception :

5.2 ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π¨Π°Π±Π»ΠΎΠ½ интСрфСйсного класса-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π‘ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ достаточно ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π°ΠΊΠΎΠΉ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ класс ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² шаблон класса-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт интСрфСйс Π² стилС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

6. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹Π΅ классы ΠΈ классы-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ

7. Π˜Ρ‚ΠΎΠ³ΠΈ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйсного класса создаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-Ρ„Π°Π±Ρ€ΠΈΠΊΠΎΠΉ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйсный класс.

Для удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйсного класса ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ интСрфСйсный класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ дСструктор.

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

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

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

[GoF]
Π“Π°ΠΌΠΌΠ° Π­., Π₯Π΅Π»ΠΌ Π ., ДТонсон Π ., ВлиссидСс Π”ΠΆ. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования. ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования.: ΠŸΠ΅Ρ€. с Π°Π½Π³Π». β€” БПб.: ΠŸΠΈΡ‚Π΅Ρ€, 2001.

[Josuttis]
ДТосаттис, Николаи М. Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C++: справочноС руководство, 2-Π΅ ΠΈΠ·Π΄.: ΠŸΠ΅Ρ€. с Π°Π½Π³Π». β€” М.: ООО «И.Π”. Π’ΠΈΠ»ΡŒΡΠΌΡΒ», 2014.

[Dewhurst]
Π”ΡŒΡŽΡ…ΡΡ€ΡΡ‚, Π‘Ρ‚Π΅Ρ„Π°Π½ К. БкользкиС мСста C++. Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ компиляции Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.: ΠŸΠ΅Ρ€. с Π°Π½Π³Π». β€” М.: Π”ΠœΠš ΠŸΡ€Π΅ΡΡ, 2012.

[Meyers1]
ΠœΠ΅ΠΉΠ΅Ρ€Ρ, Π‘ΠΊΠΎΡ‚Ρ‚. НаиболСС эффСктивноС использованиС C++. 35 Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².: ΠŸΠ΅Ρ€. с Π°Π½Π³Π». β€” М.: Π”ΠœΠš ΠŸΡ€Π΅ΡΡ, 2000.

[Meyers2]
ΠœΠ΅ΠΉΠ΅Ρ€Ρ, Π‘ΠΊΠΎΡ‚Ρ‚. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС C++. 55 Π²Π΅Ρ€Π½Ρ‹Ρ… способов ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ структуру ΠΈ ΠΊΠΎΠ΄ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.: ΠŸΠ΅Ρ€. с Π°Π½Π³Π». β€” М.: Π”ΠœΠš ΠŸΡ€Π΅ΡΡ, 2014.

[Meyers3]
ΠœΠ΅ΠΉΠ΅Ρ€Ρ, Π‘ΠΊΠΎΡ‚Ρ‚. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈ соврСмСнный C++: 42 Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ использованию C++11 ΠΈ C++14.: ΠŸΠ΅Ρ€. с Π°Π½Π³Π». β€” М.: ООО «И.Π”. Π’ΠΈΠ»ΡŒΡΠΌΡΒ», 2016.

[Sutter]
Π‘Π°Ρ‚Ρ‚Π΅Ρ€, Π“Π΅Ρ€Π±. РСшСниС слоТных Π·Π°Π΄Π°Ρ‡ Π½Π° C++.: ΠŸΠ΅Ρ€. с Π°Π½Π³Π». β€” М: ООО «И.Π”. Π’ΠΈΠ»ΡŒΡΠΌΡΒ», 2015.

[Sutter/Alexandrescu]
Π‘Π°Ρ‚Ρ‚Π΅Ρ€, Π“Π΅Ρ€Π±. АлСксандрСску, АндрСй. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ программирования Π½Π° Π‘++.: ΠŸΠ΅Ρ€. с Π°Π½Π³Π». β€” М.: ООО «И.Π”. Π’ΠΈΠ»ΡŒΡΠΌΡΒ», 2015.

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

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

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