ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ
ΠΡΠ°Π²ΠΈΠ»Π° C++ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ «Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠΊΡΡΡΡΠΌ», ΡΠ΅ΠΌ Π² ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π½, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ Π² ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ΅ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΌ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ ΠΎΡΠΊΡΡΡΡΠΌ ΠΏΡΡΠ΅ΠΌ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ. ΠΠ»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° Π½Π΅Π³ΠΎ, ΡΠ»ΡΠΆΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠΎΠΏΡΠΎΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π½Π°ΡΠ»Π΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΉ ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ (Π² ΡΠ·ΡΠΊΠ°Ρ Ρ ΡΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΏΠΎΠ².
ΠΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π΅Π³ΠΎ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ public (ΠΊΠ°ΠΊ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅). Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΊΡΡΡΡΠ΅ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ»Π΅Π½Ρ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ° ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌΠΈ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΎΠ±ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ°. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΎΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ΅ Ρ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠΎΠΌ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π½Π΅ΡΠ°Π·Π»ΠΈΡΠΈΠΌΡΠΌ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ.
ΠΡΠ»ΠΈ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π΅Π³ΠΎ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡ ΠΊΠ°ΠΊ private, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ, Π½Π°ΡΠ»Π΅Π΄ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΡΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠΌ. ΠΡΠΊΡΡΡΡΠ΅ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ»Π΅Π½Ρ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ° ΡΡΠ°Π½ΡΡ Π·Π°ΠΊΡΡΡΡΠΌΠΈ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°ΠΌ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΠΈ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡ protected, ΡΠΎ ΠΎΡΠΊΡΡΡΡΠ΅ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ° ΡΡΠ°Π½ΡΡ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ, Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ° Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ.
ΠΡΠΈΠΌΠ΅Ρ. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ»Π΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΡΠΈΠ³ΡΡΠ°ΠΌΠΈ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ:
Circle C1;
SolidCircle SC1, SC2;
ΠΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π Π² ΡΠ·ΡΠΊΠ΅ Π‘++ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΈΠΏΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π ΠΈΠ»ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠΌ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ SolidCircle ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ Circle, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠ°Π²ΠΎΠΌΠΎΡΠ΅Π½:
C1 = SC1;
Π₯ΠΎΡΡ ΠΎΠ½ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½, Π½ΠΎ ΠΎΠΏΠ°ΡΠ΅Π½: Π»ΡΠ±ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ° ΡΡΠ΅Π·Π°ΡΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ fillcol, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ SolidCircle, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ΅ΡΡΠ½ ΠΏΡΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΠΊΡΠ΄Π° Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΊΠ»Π°ΡΡΠ° Circle.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌ:
SC2 = Π‘1; // ΠΎΡΠΈΠ±ΠΊΠ° ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° SolidCircle Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
class SolidCircle: Circle{.. .};
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡ Circle ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π·Π°ΠΊΡΡΡΡΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, move (), Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ»Π°ΡΡ SolidCircle Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠΌ Circle, ΠΌΡ ΡΠΆΠ΅ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ°, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ.
Π‘1 = SC1; // ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΠΎΡ ΠΆΠ΅, ΡΡΠΎ ΠΈ Π² ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ΅, Π°ΡΡΠΈΠ±ΡΡ Π΄ΠΎΡΡΡΠΏΠ° Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ ΠΏΡΡΠ΅ΠΌ ΡΠ²Π½ΠΎΠΉ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
class SolidCircle: Circle{.
public:
.. .
Circle: move;
};
ΠΡΠ°Π²ΠΈΠ»Π° C++ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ «Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠΊΡΡΡΡΠΌ», ΡΠ΅ΠΌ Π² ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π½, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ Π² ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ΅ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΌ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ ΠΎΡΠΊΡΡΡΡΠΌ ΠΏΡΡΠ΅ΠΌ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ.
Π‘ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ²ΡΠ·Π°Π½ ΠΎΡΠΎΠ±ΡΠΉ ΡΠΈΠΏ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° — Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (ΡΠΈΡΡΡΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ). ΠΠ°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ (ΡΡΡΠ»ΠΎΠΊ) Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΡΠΈ ΠΎΡΠΊΡΡΡΠΎΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°Ρ , ΡΠΎ Π²ΡΠ±ΠΎΡ, ΠΊΠ°ΠΊΡΡ Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ·ΡΠ²Π°ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Ρ ΡΡΠ΅ΡΠΎΠΌ Π²ΡΡΡΠ½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΈΠΏΠ° Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π’ΠΎ Π΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΠΎΡ ΡΠΈΠΏΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π° ΠΎΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ. ΠΠ°Π½Π½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΏΠΎΠ·Π΄Π½Π΅Π³ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ. ΠΠΏΠΈΡΠ΅ΠΌ Π½Π°ΡΠ»Π΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ.
class One {.
public:virtual f (){return 1;}.
};
class Two: public One {.
public:virtual f (){return 2;}.
};
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°:
One one, *p;
Two two;
.. .
p = &one; p -> f (); // Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° One, f () Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ 1.
p = &two; p -> f (); // Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Two, f () Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ 2.
one.f (); // f () Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ 1.
one = two; one. f (); // one — ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° One, f () Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ 1.
Π‘ Π΄ΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠ½ΠΊΡΠΈΡ f () Π½Π΅ Π±ΡΠ»Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ, ΡΠΎ Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π² ΠΎΠ±ΠΎΠΈΡ ΠΊΠ»Π°ΡΡΠ°Ρ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, Π° ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΎΠΉ, ΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»ΠΎΡΡ Π±Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 1.
ΠΠ»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° Π½Π΅Π³ΠΎ, ΡΠ»ΡΠΆΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°, ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² ΡΠ·ΡΠΊ Π‘++.
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ dynamic_cast. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»ΡΡΠ°ΠΉ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ.
dynamic_cast (p);
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΊ ΡΠΈΠΏΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ²ΡΡΠ°ΡΡΠΈΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Ρ. ΠΡΠ»ΠΈ Ρ ΡΠΈΠΏΠ° Π’ype* ΠΈΠ»ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΠΎΡΠΊΡΡΡΡΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ Π’ype, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΈ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΈΠΏΠ° Π’ype*. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π½ΡΠ»Ρ.
ΠΡΠΈΠΌΠ΅Ρ. Π ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΡΠΎ Circle — Π·Π°ΠΊΡΡΡΡΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ SolidCircle, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°:
Shape *S;
Circle *C;
SolidCircle *SΠ‘;
.. .
- S = Π‘; // ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ
- S = dynamic_cast (Π‘); // ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ
- S = dynamic_cast (SΠ‘); // ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡΡ 0
- S = SΠ‘; // ΠΎΡΠΈΠ±ΠΊΠ°
ΠΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΊ ΡΠΈΠΏΡ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠΈΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΈΠΌΠ΅ΡΡΠΈΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ ΡΠΈΠΏ Ρ — Π’ype* ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΡΠΈΠΏ, ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΠ½Π°ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π½ΡΠ»Ρ.
ΠΡΠΈΠΌΠ΅Ρ. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΡΡΠ½ΡΡΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»ΡΠΆΠΈΡ Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΡΡ.
bool isCircle (Shape* ptr){.
Circle* cptr = dynamic_cast (ptr);
return cptr ≠ 0;
}.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ:
Circle C;
Triangle T;
.. .
isCircle (&C); // true.
isCircle (&Π’); // false.