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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС C++. 55 Π²Π΅Ρ€Π½Ρ‹Ρ… способов ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ структуру ΠΈ ΠΊΠΎΠ΄ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 28

Автор Π‘ΠΊΠΎΡ‚Ρ‚ ΠœΠ°ΠΉΠ΅Ρ€Ρ

Π—Π΄Π΅ΡΡŒ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ – всС Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ относится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ свободным функциям, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ класса. Π”Ρ€ΡƒΠ·ΡŒΡ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ класса, Ρ‡Ρ‚ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния инкапсуляции, Π²Ρ‹Π±ΠΎΡ€ слСдуСт Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ функциями-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ ΠΈ свободными функциями, Π° ΠΌΠ΅ΠΆΠ΄Ρƒ функциями-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, с ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΈ свободными функциями, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ, β€“ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ. (Но ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π°Π΄ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния инкапсуляции. Π’ ΠΏΡ€Π°Π²ΠΈΠ»Π΅ 24 ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ касаСтся нСявного привСдСния Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π°Π΄ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ функциями-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ ΠΈ свободными функциями.)

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°Π±ΠΎΡ‚Π° ΠΎΠ± инкапсуляции Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция Π½Π΅ Π±Ρ‹Π»Π° Ρ‡Π»Π΅Π½ΠΎΠΌ класса, вовсС Π½Π΅ слСдуСт, Ρ‡Ρ‚ΠΎ эта функция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠΌ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Тизнь программистам, ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΡˆΠΈΠΌ ΠΊ языкам, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ классов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Eiffel, Java, C# ΠΈ Ρ‚. ΠΏ.). НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ clearBrowser статичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слуТСбного класса. Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ) класса WebBrowser, ΠΎΠ½Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ скаТСтся Π½Π° инкапсуляции Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ².

Π’ C++ Π±ΠΎΠ»Π΅Π΅ СстСствСнно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ clearBrowser свободной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ пространствС ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ ΠΈ класс WebBrowser:


namespace WebBrowserStuff {

class WebBrowser {...};

void clearBrowser(WebBrowser& wb);

...

}


Но Π΄Π΅Π»ΠΎ Ρ‚ΡƒΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² СстСствСнности, вСдь пространства ΠΈΠΌΠ΅Π½, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ классов, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… исходных Ρ„Π°ΠΉΠ»Π°Ρ…. И это Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€ΠΎΠ΄Π΅ clearBrowser ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. НС Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π½ΠΈ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, Π½ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ класса, ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊ WebBrowser ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ‚Π΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ класса WebBrowser ΠΈ Ρ‚Π°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ. НС Π±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ clearBrowser, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ Π±Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ clearCache, clearHistory ΠΈ removeCookies.

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


// Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ β€œwebbrowser.h” – Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ для самого класса WebBrowser,

// Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΊ Π½Π΅ΠΌΡƒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅

namespace WebBrowserStuff {

class WebBrowser{...};

... // базовая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ

// Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Π½Π΅Ρ‡Π»Π΅Π½Ρ‹, Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ всСм

// ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ

}

// Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ β€œwebbrowserbookmarks.h”

namespace WebBrowserStuff {

... // Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ

} // Π·Π°ΠΊΠ»Π°Π΄ΠΎΠΊ

// Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ β€œwebbrowsercookies.h”

namespace WebBrowserStuff {

... // Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ

} // β€œΠΊΡƒΠΊΠΎΠ²β€

...


ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C++. ВмСсто СдинствСнного ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° <Π‘++ StandardLibrary>, содСрТащСго всС, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² пространствС ΠΈΠΌΠ΅Π½ std, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ дСсятки Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, <vector>, <algorithm>, <memory> ΠΈ Ρ‚. ΠΏ.). Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… объявлСна нСкоторая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· std. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #include <memory>, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉΡΡ Π² списках, Π½Π΅ обязан Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ #include <list>. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π° этапС компиляции ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ зависят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Ρ‚Π΅Ρ… частСй систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ (см. Π² ΠΏΡ€Π°Π²ΠΈΠ»Π΅ 31 обсуТдСниС Π΄Ρ€ΡƒΠ³ΠΈΡ… способов ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ зависимостСй компиляции). ПодобноС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли ΠΎΠ½Π° обСспСчиваСтся функциями-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π΅Π³ΠΎ нСльзя Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° части.

Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…, Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½ – ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Для этого Π½ΡƒΠΆΠ½ΠΎ лишь ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π΅Ρ‡Π»Π΅Π½Ρ‹ ΠΈ Π½Π΅Π΄Ρ€ΡƒΠ·ΡŒΡ) Π² Ρ‚ΠΎ ΠΆΠ΅ пространство ΠΈΠΌΠ΅Π½. НапримСр, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ класса WebBrowser Ρ€Π΅ΡˆΠΈΡ‚ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ объявлСния этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² пространство ΠΈΠΌΠ΅Π½ Web-BrowserStuff. НовыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ становятся послС этого Ρ‚Π°ΠΊ ΠΆΠ΅ доступны, ΠΊΠ°ΠΊ ΠΈ всС ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ классы, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ опрСдСлСния классов Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступа ΠΊ инкапсулированным (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ) Ρ‡Π»Π΅Π½Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, поэтому Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Β«Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΆΠ΅ Π½Π΅ назовСшь пСрвоклассной. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΏΡ€Π°Π²ΠΈΠ»Π΅ 7 ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС классы ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ.

Π§Ρ‚ΠΎ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ

β€’ ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ функциям-Ρ‡Π»Π΅Π½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π½ΠΈ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, Π½ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ класса. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ инкапсуляции ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Β«ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ 24: ΠžΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊΠΎ всСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ

Π’ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ я ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π», Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° классом нСявных ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² – нСудачная ΠΌΡ‹ΡΠ»ΡŒ. Но, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΅ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… касаСтся создания числовых Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Ссли Π²Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ класс для прСдставлСния Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл, Ρ‚ΠΎ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа Π² Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ выглядит Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ. Π£ΠΆ Π²ΠΎ всяком случаС Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, Ρ‡Π΅ΠΌ встроСнноС Π² C++ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ int Π² double (ΠΈ ΠΊΡƒΠ΄Π° Ρ€Π°Π·ΡƒΠΌΠ½Π΅Π΅ встроСнного прСобразования ΠΈΠ· double Π² int). Коли Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ объявлСния класса Rational ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


class Rational {

public:

Rational(int numerator = 0,

int denominator = 1); // конструктор ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ explicit;

// допускаСт нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

// int Π² Rational

int numerator() const; // Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа ΠΊ Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŽ ΠΈ

int denominator() const; // Π·Π½Π°ΠΌΠ΅Π½Π°Ρ‚Π΅Π»ΡŽ – см. ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ 22

private:

...

};


Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ понадобится ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (слоТСниС, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ‚. ΠΏ.), Π½ΠΎ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, слСдуСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… посрСдством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈΠ»ΠΈ свободных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ класса. Π˜Π½ΡΡ‚ΠΈΠ½ΠΊΡ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: «БомнСваСшься – придСрТивайся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Β». Π’Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ, скаТСм, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл относится ΠΊ классу Rational, поэтому каТСтся СстСствСнным Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ operator* Π² самом этом классС. Но Π½Π°ΠΏΠ΅Ρ€Π΅ΠΊΠΎΡ€ ΠΈΠ½Ρ‚ΡƒΠΈΡ†ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ 23 ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ идСя помСщСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ класса, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½Π° ассоциирована, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, оставим Π½Π° врСмя эту Ρ‚Π΅ΠΌΡƒ ΠΈ посмотрим, Π²ΠΎ Ρ‡Ρ‚ΠΎ выливаСтся объявлСниС operator* Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ Rational:


class Rational {

public:

...

const Rational operator*(const Rational& rhs) const;

}


Если Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта функция объявлСна ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ константный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ссылку Π½Π° const Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°), ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ 3, 20 ΠΈ 21.

Π’Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ позволяСт Π»Π΅Π³ΠΊΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами:


Rational oneEighth(1, 8);

Rational one Half(1, 2);

Rational result = oneHalf * oneEighth; // ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ

result = result * oneEighth; // ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ


Но Π²Ρ‹ Π½Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Ρ‹. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Rational ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° int. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², это довольно СстСствСнно – ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ Π΄Π²Π° числа, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ числовым Ρ‚ΠΈΠΏΠ°ΠΌ.

Однако Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ случаСв:


result = oneHalf * 2; // ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ

result = 2 * oneHalf; // ошибка!


Π­Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π·Π½Π°ΠΊ. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΡƒΡ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ (Π½Π΅ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ порядка сомноТитСлСй), ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ становится понятным, Ссли ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π²Π° послСдних выраТСния Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅:


result = oneHalf.operator*(2); // ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ

result = 2.operator*(oneHalf); // ошибка!


ΠžΠ±ΡŠΠ΅ΠΊΡ‚ oneHalf – это экзСмпляр класса, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π² сСбя operator*, поэтому компилятор Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Но с Ρ†Π΅Π»Ρ‹ΠΌ числом 2 Π½Π΅ ассоциирован Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ класс, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, Π½Π΅Ρ‚ для Π½Π΅Π³ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ operator*. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ operator*, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса (Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ пространствС ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ Π² глобальной области видимости):