r.setWidth(r.width() + 10); // ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΈΡΠΈΠ½Ρ r Π½Π° 10
assert(r.height() == oldHeight); // ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΡΠΎΡΠ° r
} // Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ
Π―ΡΠ½ΠΎ, ΡΡΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ assert Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°ΡΡΡΠ°ΡΡΡΡ. Π€ΡΠ½ΠΊΡΠΈΡ make-Bigger ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠΈΠ½Ρ r. ΠΡΡΠΎΡΠ° ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°:
class Square: public Rectangle {β¦};
Square s;
...
assert(s.width() == s.height()); // Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π»Ρ
// Π²ΡΠ΅Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ²
makeBigger(s); // ΠΈΠ·-Π·Π° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, s ΡΠ²Π»ΡΠ΅ΡΡΡ
// Rectangle, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ
// ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π΅Π³ΠΎ ΠΏΠ»ΠΎΡΠ°Π΄Ρ
assert(s.width() == s.height()); // ΠΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ
// Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ²
ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΡΡΠΎ Π²ΡΠΎΡΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½Π°ΡΡΡΠ΅Π½ΠΎ. ΠΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΡΠΈΡΠΈΠ½Π° ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° ΡΠ°Π²Π½Π° Π΅Π³ΠΎ Π²ΡΡΠΎΡΠ΅.
ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ Π²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠ°ΠΊ ΠΏΡΠΈΠΌΠΈΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ?
β’ ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ makeBigger Π²ΡΡΠΎΡΠ° s ΡΠ°Π²Π½Π° ΡΠΈΡΠΈΠ½Π΅.
β’ ΠΠ½ΡΡΡΠΈ makeBigger ΡΠΈΡΠΈΠ½Π° s ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π° Π²ΡΡΠΎΡΠ° β Π½Π΅Ρ.
β’ ΠΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· makeBigger Π²ΡΡΠΎΡΠ° s ΡΠ½ΠΎΠ²Π° ΡΠ°Π²Π½Π° ΡΠΈΡΠΈΠ½Π΅ (ΠΎΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ s ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ makeBigger ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ s, Π° Π½Π΅ Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ).
Π’Π°ΠΊ ΡΡΠΎ ΠΆΠ΅?
ΠΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ Π² ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠΈΡ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, Π³Π΄Π΅ ΠΈΠ½ΡΡΠΈΡΠΈΡ, ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½Π½Π°Ρ Π²Π°ΠΌΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±Π»Π°ΡΡΡΡ Π·Π½Π°Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ»ΠΎΡ ΠΈΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΎΠΌ. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΡΠ΄Π½ΠΎΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΡΠ΅ Π΄Π»Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° (Π΅Π³ΠΎ ΡΠΈΡΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π²ΡΡΠΎΡΡ), Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° (Π΅Π³ΠΎ ΡΠΈΡΠΈΠ½Π° ΠΈ Π²ΡΡΠΎΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ). ΠΠΎ ΠΎΡΠΊΡΡΡΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, β Π²ΡΠ΅! β ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΈ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². Π ΡΠΈΡΡΠ°ΡΠΈΠΈ Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°ΠΌΠΈ (Π° ΡΠ°ΠΊΠΆΠ΅ Π² Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ , Π²ΠΊΠ»ΡΡΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈ ΡΠΏΠΈΡΠΊΠΈ ΠΈΠ· ΠΏΡΠ°Π²ΠΈΠ»Π° 38), ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π΄Π΅ΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎΠ³ΠΎ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΉ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΡΠ±ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ (Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π½Π°ΡΡ ΡΡΠΎ Π»ΡΡΡΠ΅ Π΄ΡΡΠ³ΠΈΡ ): Π΅ΡΠ»ΠΈ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΡΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΡΠ΅ ΠΆΠ΅ Π½Π΅ ΡΡΠΎΠΈΡ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½Π½Π°Ρ Π²Π°ΠΌΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π³ΠΎΠ΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΡΠΈΡΠΈΡ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ΅ Π²Π°ΡΠΈ Π·Π½Π°Π½ΠΈΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ Π°ΡΡΠ΅Π½Π°Π»Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ²ΠΎΡ ΠΈΠ½ΡΡΠΈΡΠΈΡ Π½ΠΎΠ²ΡΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. Π‘ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ΄Π΅Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Penguin ΠΎΡ Bird ΠΈΠ»ΠΈ Square ΠΎΡ Rectangle Π±ΡΠ΄Π΅Ρ ΠΊΠ°Π·Π°ΡΡΡΡ Π²Π°ΠΌ ΡΡΠΎΠ»Ρ ΠΆΠ΅ Π·Π°Π±Π°Π²Π½ΠΎΠΉ, ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½ΠΈΡ. Π’Π°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ, Π½ΠΎ ΡΡΠΎ ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎ.
ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Β«ΡΠ²Π»ΡΠ΅ΡΡΡΒ» β Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ. ΠΠ²Π° Π΄ΡΡΠ³ΠΈΡ , Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ β ΡΡΠΎ Β«ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΒ» ΠΈ Β«ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌΒ». ΠΠ½ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»Π°Ρ 38 ΠΈ 39. ΠΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ ΠΏΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C++ Π²Π΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ΄Π΅Ρ Π²ΠΊΡΠΈΠ²Ρ ΠΈ Π²ΠΊΠΎΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΡΡΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ Β«ΡΠ²Π»ΡΠ΅ΡΡΡΒ». ΠΠΎΡΡΠΎΠΌΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΡ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Π² C++.
Π§ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡβ’ ΠΡΠΊΡΡΡΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«ΡΠ²Π»ΡΠ΅ΡΡΡΒ». ΠΡΠ΅, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΎΡ Π½Π΅Π³ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠ°Π²ΠΈΠ»ΠΎ 33: ΠΠ΅ ΡΠΊΡΡΠ²Π°ΠΉΡΠ΅ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°
Π¨Π΅ΠΊΡΠΏΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΡΡΠ»ΡΠ» ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ . ΠΠ½ ΠΏΠΈΡΠ°Π»: Β«Π§ΡΠΎ Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅Π±Π΅? Π ΠΎΠ·Π° ΠΏΠ°Ρ Π½Π΅Ρ ΡΠΎΠ·ΠΎΠΉ, Ρ ΠΎΡΡ ΡΠΎΠ·ΠΎΠΉ Π½Π°Π·ΠΎΠ²ΠΈ Π΅Π΅, Ρ ΠΎΡΡ Π½Π΅ΡΒ». Π Π΅ΡΠ΅ ΠΏΠΈΡΠ°Π» Π±Π°ΡΠ΄: Β«ΠΡΠΎ Π΄ΠΎΠ±ΡΠΎΠ΅ ΠΌΠΎΠ΅ ΠΏΠΎΡ ΠΈΡΠΈΡ ΠΈΠΌΡ, Π½Π΅ΡΡΠ°ΡΡΠ½ΡΠΌ ΡΠ΄Π΅Π»Π°Π΅Ρ ΠΌΠ΅Π½Ρ Π²ΠΎΠ²Π΅ΠΊβ¦Β» ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. Π ΡΡΠΎ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π·ΠΎΡ Π½Π° ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π² C++.
ΠΠΎΠΎΠ±ΡΠ΅-ΡΠΎ ΡΡΠ° ΡΠ΅ΠΌΠ° ΠΎΡΠ½ΠΎΡΠΈΡΡΡ Π½Π΅ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΎΠ±Π»Π°ΡΡΡΠΌ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ΅ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π² ΡΠ°ΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅:
int x; // Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
void someFunc()
{
double x; // Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
std::cin >> x; // ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ x
}
ΠΈΠΌΡ x Π² ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ, Π° Π½Π΅ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΊΡΡΠ²Π°ΡΡ (Β«Π·Π°ΡΠ΅Π½ΡΡΡΒ») ΠΈΠΌΠ΅Π½Π° ΠΈΠ· Π²Π½Π΅ΡΠ½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ:
ΠΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΡΡΠ΅ΡΠ°Π΅Ρ ΠΈΠΌΡ x Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ someFunc, ΠΎΠ½ ΡΠΌΠΎΡΡΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π»ΠΈ ΡΡΠΎ-ΡΠΎ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠΌΡ x Π² ΡΡΠ½ΠΊΡΠΈΠΈ someFunc ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° double, Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ x ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int, Π½ΠΎ ΡΡΠΎ Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ. ΠΡΠ°Π²ΠΈΠ»Π° ΡΠΎΠΊΡΡΡΠΈΡ ΠΈΠΌΠ΅Π½ Π² C++ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ-Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΈ: ΡΠΊΡΡΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π°. ΠΡΠ½ΠΎΡΡΡΡΡ Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ², Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ x ΡΠΈΠΏΠ° double ΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ x ΡΠΈΠΏΠ° int.
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΡΡΡΠ»Π°Π΅ΠΌΡΡ Π½Π° ΡΡΠΎ-ΡΠΎ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½, typedef ΠΈΠ»ΠΈ ΡΠ»Π΅Π½ Π΄Π°Π½Π½ΡΡ ), ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΡΠΎ, Π½Π° ΡΡΠΎ ΠΌΡ ΡΡΡΠ»Π°Π΅ΠΌΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π² Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ . ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²Π»ΠΎΠΆΠ΅Π½Π° Π² ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
class Base {
private:
int x;
public:
virtual void mf1() = 0;
virtual void mf2();
void mf3();
...
};
class Derived: public Base {
public:
virtual void mf1()
void mf4();
...
};
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠΊΡΡΡΡΠ΅, ΡΠ°ΠΊ ΠΈ Π·Π°ΠΊΡΡΡΡΠ΅ ΠΈΠΌΠ΅Π½Π°, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° ΡΠ»Π΅Π½ΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΡΠ°ΠΊ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ². ΠΠ΄Π½Π° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ² β ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ, Π΄ΡΡΠ³Π°Ρ β ΠΏΡΠΎΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ, Π° ΡΡΠ΅ΡΡΡ β Π½Π΅Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ. ΠΡΠΎ Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ , Π° Π½Π΅ ΠΎ ΡΠ΅ΠΌ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΌ. Π― ΠΌΠΎΠ³ Π±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΠΏΡΠΈΠΌΠ΅Ρ Π΅ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠΈΠΏΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ typedef. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²Π°ΠΆΠ½ΠΎ Π»ΠΈΡΡ ΡΠΎ, ΡΡΠΎ Π²ΡΠ΅ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π°. Π§ΡΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅Π½ΡΡΡ β Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ, ΠΏΠΎΠ½ΡΠ², ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ, Π»Π΅Π³ΠΊΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΈ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ C++ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΠΏΡΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ mf4 Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
void Derived::mf4()
{
...
mf2();
...
}
ΠΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΠΈΠ΄ΠΈΡ ΠΈΠΌΡ mf2, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ½ΡΡΡ, Π½Π° ΡΡΠΎ ΠΎΠ½ΠΎ ΡΡΡΠ»Π°Π΅ΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΈΠΌΠ΅Π½ΠΈ mf2. Π‘Π½Π°ΡΠ°Π»Π° ΠΎΠ½ΠΎ ΠΈΡΠ΅ΡΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ (ΡΠΎ Π΅ΡΡΡ Π²Π½ΡΡΡΠΈ mf4), Π½ΠΎ ΡΠ°ΠΌ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅Ρ. Π’ΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠ°Ρ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΠΎ Π΅ΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° Derived. Π Π·Π΄Π΅ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΈΠΌΡ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ. Π Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΡΠ°ΠΌ Π½Π΅ΡΡΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ mf2, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΠΈΡΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ Π±Ρ mf2 Π½Π΅ Π±ΡΠ»ΠΎ ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ Base, ΡΠΎ ΠΏΠΎΠΈΡΠΊ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»ΡΡ Π±Ρ ΡΠ½Π°ΡΠ°Π»Π° Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΌ Base, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ²ΠΎΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΠ°Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΉ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Ρ ΠΎΡΡ ΠΈ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°Π΅Ρ Π²ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π½ Π² C++. ΠΠ°ΡΠ° ΡΠ΅Π»Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΎ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΈΠΌΠ΅Π½ ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΡΠΌΠ΅Π΅ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΡΡΡΠΏΡΠΈΠ·ΠΎΠ², Π° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ Π²Π°ΡΠΈΡΡ.
Π‘Π½ΠΎΠ²Π° Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½ΠΎ Π½Π° ΡΡΠΎΡ ΡΠ°Π· ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ mf1 ΠΈ mf3, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²Π΅ΡΡΠΈΡ mf3 Π² ΠΊΠ»Π°ΡΡ Derived. ΠΠ°ΠΊ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»Π΅ 36, ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠ° mf3 Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Derived (ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ Π½Π΅Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ) ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½Π°, Π½ΠΎ ΡΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΈΠΌΠ΅Π½, Π·Π°ΠΊΡΠΎΠ΅ΠΌ Π½Π° ΡΡΠΎ Π³Π»Π°Π·Π°.
class Base {
private:
int x;
public:
virtual void mf1() = 0;
virtual void mf1(int);
virtual void mf2();
void mf3();
void mf3(double);
...
};
class Derived: public Base {
public:
virtual void mf1()
void mf3();
void mf4();
...
};
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ΄ΠΈΠ²ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° C++, Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠ΅Π³ΠΎΡΡ Ρ Π½ΠΈΠΌ. ΠΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠΎΠΊΡΡΡΠΈΡ ΠΈΠΌΠ΅Π½ Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ Π΄Π΅Π»ΠΎΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ mf1 ΠΈ mf3 Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΎΠΊΠ°ΠΆΡΡΡΡ ΡΠΊΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π½, Base::mf1 ΠΈ Base::mf3 Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ Derived!