Senior C++ Developer
ΠΠ·ΡΡΠ°Π΅ΠΌ C++. ΠΠΎ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²Π°: @adv_and_pr Π ΠΠ: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba
Show moreπ Analytical overview of Telegram channel Senior C++ Developer
Channel Senior C++ Developer (@seniorcpp) in the Russian language segment is an active participant. Currently, the community unites 11 642 subscribers, ranking 10 395 in the Technologies & Applications category and 55 326 in the Russia region.
π Audience metrics and dynamics
Since its creation on Π½Π΅Π²ΡΠ΄ΠΎΠΌΠΎ, the project has demonstrated rapid growth, gathering an audience of 11 642 subscribers.
According to the latest data from 02 September, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -68 over the last 30 days and by -3 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 10.05%. Within the first 24 hours after publication, content typically collects 4.47% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 170 views. Within the first day, a publication typically gains 521 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 0.
- Thematic interests: Content is focused on key topics such as c++, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, git, true.
π Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
βΠΠ·ΡΡΠ°Π΅ΠΌ C++.
ΠΠΎ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²Π°: @adv_and_pr
Π ΠΠ: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35baβ
Thanks to the high frequency of updates (latest data received on 03 September, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
{} Π²ΠΌΠ΅ΡΡΠΎ ΠΊΡΡΠ³Π»ΡΡ
() ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ =.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° uniform initialization Π²ΠΊΠ»ΡΡΠ°ΡΡ:
- ΠΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΠ·ΠΊΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ (narrowing conversion), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΡΡ
.
- ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
ΠΈ ΡΡΡΡΠΊΡΡΡ.
- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π½Π΅Π΅ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ ΡΡΡΡΠΊΡΡΡΡ.
*ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ uniform initialization Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Π½Π΅ ΡΠΎΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.cereal Π΄Π»Ρ C++ β ΡΡΠΎ Π³ΠΈΠ±ΠΊΠ°Ρ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠΌΠ°ΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅, XML ΠΈ JSON. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΎΠ±Π»Π°ΡΡΡΡ
, Π³Π΄Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ MyData ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ cereal::BinaryOutputArchive. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ cereal::BinaryInputArchive. Π ΠΊΠΎΠ½ΡΠ΅ ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ m2, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ.ΠΠ°ΡΠΈΠ²Π½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ΅ www.otus.ruBoost.Serialization β ΡΡΠΎ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠΈΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Boost ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠΎΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
C++, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΈΠΏΡ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ, ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΈ XML.
Boost.Serialization ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ MyClass Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ obj1 ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ boost::archive::text_oarchive. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ obj2 ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ boost::archive::text_iarchive. Π ΠΊΠΎΠ½ΡΠ΅ ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ obj2, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ.Cachegrind: ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π½Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Valgrind. Cachegrind ΠΌΠΎΠΆΠ΅Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΡΡΠ° Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ cache miss ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΡΠΎΠ±ΡΡΠΈΡΡ
, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ ΠΊΡΡΠ΅ΠΌ.
Perf: ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² Linux, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ ΠΊΡΡΠ΅ΠΌ.
OProfile: Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² Linux, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ ΠΊΡΡΠ΅ΠΌ.std::atomic ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ <atomic>, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π²Π²Π΅Π΄Π΅Π½Π° Π² C++11 Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡΡ. ΠΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅, Π½Π΅Π΄Π΅Π»ΠΈΠΌΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΡΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π³ΠΎΠ½ΠΊΠΈ.
std::atomic ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π³Π΄Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
ΠΈΠ»ΠΈ ΠΎΠ±ΡΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ counter, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π² Π΄Π²ΡΡ
ΡΠ°Π·Π½ΡΡ
ΠΏΠΎΡΠΎΠΊΠ°Ρ
. ΠΠ΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ std::atomic ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ Π³ΠΎΠ½ΠΊΠΈ (race condition), ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΡΠ°ΡΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ counter ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ std::atomic<int>, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ counter ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ, ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΠ½ΠΊΠΈ Π½Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ.friend Π² C++ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π·Π°ΠΊΡΡΡΡΠΌ (private) ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΌ (protected) ΡΠ»Π΅Π½Π°ΠΌ ΠΊΠ»Π°ΡΡΠ° Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ ΡΠ΅ΡΠ½ΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, Π½Π΅ Π½Π°ΡΡΡΠ°Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ.
friend ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΠΊΠ°ΠΊ friend ΠΊΠ»Π°ΡΡΠ°, ΠΎΠ½Π° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π·Π°ΠΊΡΡΡΡΠΌ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΌ ΡΠ»Π΅Π½Π°ΠΌ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ friend Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π²ΡΠ΅ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π·Π°ΠΊΡΡΡΡΠΌ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΌ ΡΠ»Π΅Π½Π°ΠΌ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ printVolume Π΄ΠΎΡΡΡΠΏ ΠΊ Π·Π°ΠΊΡΡΡΡΠΌ ΡΠ»Π΅Π½Π°ΠΌ ΠΊΠ»Π°ΡΡΠ° Box, ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Π΅Π΅ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° friend. Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ printVolume ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π·Π°ΠΊΡΡΡΡΠΌ ΡΠ»Π΅Π½Π°ΠΌ ΠΊΠ»Π°ΡΡΠ° Box ΠΈ Π²ΡΡΠΈΡΠ»ΡΡΡ ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΡΠΎΠ±ΠΊΠΈ.shuffle ΠΈ random_shuffle ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π·Π΄Π΅ΡΡ.std::runtime_error ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ C++, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° std::exception. ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
std::runtime_error ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ b ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ divide Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π Π±Π»ΠΎΠΊΠ΅ catch ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠ²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.final.
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ final ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ°, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ final, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
class Base final {
// ...
};
class Derived : public Base {
// ...
};
// ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: ΠΊΠ»Π°ΡΡ Base ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ finalPure virtual function (ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ) β ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π½ΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π½Π΅Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ.
Π§ΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Shape, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ draw(). ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Shape, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ.
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
ΠΊΠ»Π°ΡΡΠ° Circle ΠΈ Rectangle, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ draw().
Π ΡΡΠ½ΠΊΡΠΈΠΈ main() ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΡ circle ΠΈ rectangle, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Shape. ΠΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ circle ΠΈ rectangle ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ draw() Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ
.lazy evaluation β ΡΡΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ ΡΡΠ°Π½Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΌ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΠΊΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΠ·Π±Π΅Π³Π°Ρ Π½Π΅Π½ΡΠΆΠ½ΡΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ.
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ (deferred evaluation), Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ (on-demand evaluation) ΠΈ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΡ (memoization).
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠΈΡΠ»Ρ Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ memo Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.Const correctness β ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ const, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π²Π½ΡΡΡΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ age() ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΠΊΠ°ΠΊ const, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Person. Π€ΡΠ½ΠΊΡΠΈΡ set_age() Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΠΊΠ°ΠΊ const, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ.const_cast β ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π² C++, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² const ΠΈΠ»ΠΈ volatile Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΎΠΊ. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ±ΡΠ°ΡΡ const ΠΈΠ»ΠΈ volatile ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ MyClass Ρ Π΄Π²ΡΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ: nonConstMethod() ΠΈ constMethod(). ΠΠ΅ΡΠΎΠ΄ nonConstMethod() Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ Π²ΡΠ·Π²Π°ΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅.
ΠΠ΄Π½Π°ΠΊΠΎ, Π²Π½ΡΡΡΠΈ constMethod() ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ const_cast Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° const Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ this, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ Π²ΡΠ·Π²Π°ΡΡ nonConstMethod() Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅.ΠΠ°ΡΠΈΠ²Π½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ΅ www.otus.ruadd(). ΠΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ
ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ»Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡ
ΡΡΠΌΠΌΡ, Π° Π΄ΡΡΠ³Π°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡ
ΡΡΠΌΠΌΡ. Π ΡΡΠ½ΠΊΡΠΈΠΈ main() ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΎΠ±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ add() Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².