НаслСдованиС классов – НаслСдованиС классов Π² C++

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

НаслСдованиС классов

Как Π²ΠΈΠ΄ΠΈΠΌ, Π²Ρ‹Π±ΠΎΡ€ способа доступа ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов ΠΏΡ€ΠΈ наслСдовании опрСдСляСтся Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ сообраТСниями, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ класса:

β€’ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ (public) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ доступны ΠΈΠ· любого мСста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚.Π΅. ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ;

β€’Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ (protected) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ доступны Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, ΠΈ Π²ΠΎ всСх Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах;

β€’Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ (private) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚ΠΎΠ³ΠΎ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹.

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ рассматриваСмого класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, общСдоступныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ всСх классов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΈ рассматриваСмого классов, Π²-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, собствСнныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ рассматриваСмого класса.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π° Π² ΠΈΡ… конструкторах, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ конструкторы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² порядкС наслСдования (конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса выполняСтся Ρ€Π°Π½ΡŒΡˆΠ΅ конструктора ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса), Π° дСструкторы – Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ (дСструктор ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса выполняСтся Ρ€Π°Π½ΡŒΡˆΠ΅ дСструктора Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса).

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

Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ способС ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² допустимо использованиС ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ классов. Для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса допустимо Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π°, Π² этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс. Если инициализация производится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ наслСдования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Complex_based Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом Complex_derived, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊ наслСдуСмым ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ добавляСт ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ add():

//ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 37

//C++ ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅ наслСдованиС

#include <iostream> using namespace std; struct Complex_based {

//ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — всС общСдоступныС (public)

//ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса

Complex_based(double r = 0.0, double i = 0.0) : re(r), im(i)

{

cout << «ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса» << endl;

}

103

studfiles.net

НаслСдованиС в C++

Одной ΠΈΠ· основных особСнностСй ООП являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ наслСдования. НаслСдованиС β€” это способ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы (наслСдники) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° Π±Π°Π·Π΅ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…

Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ).

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²Ρ‹ΠΉ класс являСтся наслСдников Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡƒΡ‚Π΅ΠΌ наслСдования класс являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ (derived class), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса (based class) для создаваСмых классов. Если ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ классов ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

ΠŸΡ€ΠΈ использовании наслСдования Ρ‡Π»Π΅Π½Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΡ€ΠΎΠΌΠ΅ свойств public ΠΈ private ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свойство protected. Для ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ класса описатСли protected ΠΈ private Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Ρ‹. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ protected ΠΈ private проявляСтся ΠΏΡ€ΠΈ наслСдовании. Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС ΠΊΠ°ΠΊ protected, Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ (public

). Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ (protected) Ρ‡Π»Π΅Π½Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ public ΠΈ private.

ΠŸΡ€ΠΈ создании ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

1
2
3
4
5
6
7
8
9
10
11
12

class name_derived_class:
type_inheritance base_class
{
//Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ‡Π»Π΅Π½Ρ‹ класса
…
public:
//ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ‡Π»Π΅Π½Ρ‹ класса
…
protected:
//Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ‡Π»Π΅Π½Ρ‹ класса
…
};

Π—Π΄Π΅ΡΡŒ name_derived_class β€” имя создаваСмого ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, type_inheritance β€” способ наслСдования, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ способы наслСдования: public, private ΠΈ protected; base_class β€” имя Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ доступа ΠΊ элСмСнтам Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС ΠΈ Ρ‚ΠΈΠΏ наслСдования.

Π’ΠΈΠΏΡ‹ наслСдования ΠΈ Ρ‚ΠΈΠΏΡ‹ доступа

Бпособ доступаБпСцификатор Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классСДоступ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС
privateprivate
protected
public
Π½Π΅Ρ‚
private
private
protectedprivate
protected
public
Π½Π΅Ρ‚
protected
protected
publicprivate
protected
public
Π½Π΅Ρ‚
protected
public

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

Если Π² описании класса Π΅ΡΡ‚ΡŒ ссылка Π½Π° описываСмый ΠΏΠΎΠ·ΠΆΠ΅ класс, Ρ‚ΠΎ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ просто ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

class new_class;

Π­Ρ‚ΠΎ описаниС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ описанию ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΈ наслСдовании ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слуТСбного слова virtual.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ абстрактный Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс figure (Ρ„ΠΈΠ³ΡƒΡ€Π°), Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы для Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€ (эллипс, ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, Ρ€ΠΎΠΌΠ±, Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈ Ρ‚.Π΄.).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148

#include Β«stdafx.hΒ»

#include <iostream>
#include <math.h>
#define PI 3.14159;
using namespace std;
//Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс figure
class figure
{
public:
//n-количСство сторон Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ для окруТности n=1
int n;
//p-массив Π΄Π»ΠΈΠ½ сторон Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, для окруТности Π² p хранится радиус
float *p;
//конструктор
figure();
//ΠΌΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΠΈΠ³ΡƒΡ€Ρ‹
float perimetr();
//ΠΌΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹
virtual float square();
//ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„ΠΈΠ³ΡƒΡ€Π΅:
//Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€, ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΈ Ρ‚.Π΄.
virtual void show_parametri();
};
//конструктор класса Ρ„ΠΈΠ³ΡƒΡ€Ρ‹
figure::figure()
{
cout<<Β» Π­Ρ‚ΠΎ абстрактный конструктор Β«<<endl;
}
//ΠΌΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π°, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚
//ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² классС _circle
float figure::perimetr()
{
int i;
float psum;
for (psum=0, i=0; i<n; psum+=p[i], i++)
return psum;
}
//ΠΌΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ, ΠΏΠΎΠΊΠ° ΠΎΠ½ абстрактный, Π²
//ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ
float figure::square()
{
cout<<Β» ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Π°Ρ Ρ„ΠΈΠ³ΡƒΡ€Π° Π½Π΅ абстрактна Β«<<endl;
return 0;
}
//ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„ΠΈΠ³ΡƒΡ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚
//ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС
void figure::show_parametri()
{
cout<<Β» Абстрактная Ρ„ΠΈΠ³ΡƒΡ€Π° Β«;
}
//ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс _circle (ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ) основанный
//на классС figure
class _circle:public figure
{
public:
//конструктор
_circle();
//ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ perimetr(), square(), show_parametri()
float perimetr();
virtual float square();
virtual void show_parametri();
};
//ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс RecTangle (ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ),
//основанный Π½Π° классС figure
class RecTangle:public figure
{
public:
//конструктор
RecTangle();
//ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ square(), show_parametri()
virtual float square();
virtual void show_parametri();
};
//главная функция
void main()
{
setlocale(LC_ALL,Β«RusΒ»);
_circle RR;
RR.show_parametri();
RecTangle PP;
PP.show_parametri();
system(Β«pauseΒ»);
}
//конструктор класса _circle
_circle::_circle()
{
cout<<Β» ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ окруТности Β«<<endl;
//Π² качСствС сторон окруТности выступаСт
//СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ радиус
n=1;
p=new float[n];
cout<<Β» Π’Π²Π΅Π΄ΠΈΡ‚Π΅ радиус Β«<<endl;
cin>>p[0];
}
//ΠΌΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° окруТности
float _circle::perimetr()
{
return 2*PI*p[0];
}
//ΠΌΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ окруТности
float _circle::square()
{
return PI*p[0]*p[0];
}
//ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² окруТности
void _circle::show_parametri()
{
//Π²Ρ‹Π²ΠΎΠ΄ сообщСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ
cout<<Β» Π­Ρ‚ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ Β«<<endl;
//Π²Ρ‹Π²ΠΎΠ΄ радиуса окруТности
cout<<Β» Радиус = Β«<<p[0]<<endl;
//Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° окруТности
cout<<Β» ΠŸΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ = Β«<<perimetr()<<endl;
//Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ окруТности
cout<<Β» ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ = Β«<<square()<<endl;
}
//конструктор класса RecTangle
RecTangle::RecTangle()
{
cout<<Β» ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Β«<<endl;
//количСство сторон = 4
n=4;
p=new float[n];
//Π²Π²ΠΎΠ΄ Π΄Π»ΠΈΠ½ сторон ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°
cout<<Β» Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π΄Π»ΠΈΠ½Ρƒ сторон Β«;
cin>>p[0]>>p[1];
p[2]=p[0];
p[3]=p[1];
}
//ΠΌΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°
float RecTangle::square()
{
return p[0]*p[1];
}
//ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°
void RecTangle::show_parametri()
{
//Π²Ρ‹Π²ΠΎΠ΄ сообщСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ
cout<<Β» Π­Ρ‚ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Β«<<endl;
//Π²Ρ‹Π²ΠΎΠ΄ Π΄Π»ΠΈΠ½Ρ‹ сторон ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°
cout<<Β» a= Β«<<p[0]<<Β» b= Β«<<p[1]<<endl;
//Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅,
//Ρ‡Ρ‚ΠΎ Π² классС RecTangle вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ perimetr()
//базового класса (figure)
cout<<Β» ΠŸΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ = Β«<<perimetr()<<endl;
//Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°
cout<<Β» ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ = Β«<<square()<<endl;
}


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ записи:

kvodo.ru

Π’ΠΈΠΏΡ‹ наслСдования ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ наслСдованиС

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

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, класс-наслСдник Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс). Π­Ρ‚ΠΎ позволяСт ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса-наслСдника Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса 1

Класс, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ наслСдованиС, называСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ (Π°Π½Π³Π». base class). ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ, наслСдниками ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ классами (Π°Π½Π³Π». derived class).

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ абстрактныС классы. Абстрактный класс β€” это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описан Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΈΠΌΠ΅Π΅Ρ‚ поля, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° основС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов, наслСдованных ΠΎΡ‚ абстрактного. НапримСр, абстрактным классом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс «сотрудник Π’Π£Π—Π°Β», ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ классы «аспирант», «профСссор» ΠΈ Ρ‚.Π΄. Π’.ΠΊ. ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ поля ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»Π΅ Β«Π³ΠΎΠ΄ роТдСния»), Ρ‚ΠΎ эти Ρ‡Π»Π΅Π½Ρ‹ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ описаны Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° основС классов «аспирант», «профСссор», Π½ΠΎ Π½Π΅Ρ‚ смысла ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° основС класса «сотрудник Π²ΡƒΠ·Π°Β».

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

ΠŸΡ€ΠΈ мноТСствСнном наслСдовании Ρƒ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. Π’ этом случаС класс наслСдуСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ всСх ΠΏΡ€Π΅Π΄ΠΊΠΎΠ². Достоинства Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² большСй гибкости. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² C++. Из Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Python. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС поддСрТиваСтся Π² языкС UML.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС β€” ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ источник ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·-Π·Π° наличия ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ…. Π’ языках, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ наслСдники C++ (Java, C# ΠΈ Π΄Ρ€.), ΠΎΡ‚ мноТСствСнного наслСдования Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ интСрфСйсов.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования (C#, Java, Delphi ΠΈ Π΄Ρ€.) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ класса-ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… интСрфСйсов ΠΎΠ΄Π½ΠΈΠΌ классом. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ мноТСствСнноС наслСдованиС β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйсов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ явно, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ошибки ΠΏΡ€ΠΈ наслСдовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов-ΠΏΡ€Π΅Π΄ΠΊΠΎΠ².

НаслСдованиС Π² языкС C++

«НаслСдованиС» в C++:

class A{ //Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс

};

class B : public A{ //public наслСдованиС

}

class C : protected A{ //protected наслСдованиС

}

class Z : private A{ //private наслСдованиС

}

Π’ C++ сущСствуСт Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° наслСдования: public, protected, private. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа Ρ‡Π»Π΅Π½ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • ΠΏΡ€ΠΈ public-наслСдовании всС спСцификаторы ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π±Π΅Π· измСнСния.

  • ΠΏΡ€ΠΈ protected-наслСдовании всС спСцификаторы ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π±Π΅Π· измСнСния, ΠΊΡ€ΠΎΠΌΠ΅ спСцификатора public, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ мСняСтся Π½Π° спСцификатор protected (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ public-Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ… становятся protected).

  • ΠΏΡ€ΠΈ private-наслСдовании всС спСцификаторы ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° private.

Одним ΠΈΠ· основных прСимущСств public-наслСдования являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° классы—наслСдники ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСявно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

A* a = new B;

Π­Ρ‚Π° интСрСсная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСской ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°.

2) Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΜΠΉΡ(ΠΎΡ‚ Π»Π°Ρ‚. inter β€” ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈ Π»Π°Ρ‚. face β€” ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ) β€” это сСмантичСская ΠΈ синтаксичСская конструкция Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для спСцифицирования услуг, прСдоставляСмых классом ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ опрСдСляСт Π³Ρ€Π°Π½ΠΈΡ†Ρƒ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ классами ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, спСцифицируя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ осущСствляСт Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ сторона. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² интСрфСйсов, интСрфСйс Π² ООП являСтся строго Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ элСмСнтом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ языка ΠΈ, Π² качСствС сСмантичСской конструкции, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, интСрфСйс Β«CloneableΒ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ клонирования (создания Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², спСцифицировав ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«CloneΒ». Π’ΠΎΠ³Π΄Π° любой класс, способный ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свою копию, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСбя ΠΊΠ°ΠΊ Cloneable ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Clone. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС достаточно Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ описаниС интСрфСйса. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, интСрфСйсы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°ΡΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмы Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±Π΅Π· Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ зависимости ΠΊΠΎΠ΄Π°.

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

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

Роль интСрфСйсов Π² C++ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ абстрактныС классы.

3) ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€β€”ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, слуТащий для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈ Π΅Π³ΠΎ создании (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выдСлСния памяти). Π’ языках программирования Π‘++ ΠΈΠ»ΠΈ Java конструктором класса называСтся функция, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Ρ‚ΠΎ ΠΆΠ΅ имя, Ρ‡Ρ‚ΠΎ ΠΈ сам класс, ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния. Говоря Π±ΠΎΠ»Π΅Π΅ простым языком, конструктором называСтся Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся автоматичСски ΠΏΡ€ΠΈ создании экзСмпляра класса.

Иногда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ·ΠΊΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹: конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, конструктор копирования, конструктор прСобразования.

studfiles.net

НаслСдованиС (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ НаслСдованиС (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)?

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

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, класс-наслСдник Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс). Π­Ρ‚ΠΎ позволяСт ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса-наслСдника Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Π’ΠΈΠΏΡ‹ наслСдования

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ наслСдованиС

Класс, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ наслСдованиС, называСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ (Π°Π½Π³Π».Β base class). ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ, наслСдниками ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ классами (Π°Π½Π³Π».Β derived class).

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

ΠŸΡ€ΠΈ мноТСствСнном наслСдовании Ρƒ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. Π’ этом случаС класс наслСдуСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ всСх ΠΏΡ€Π΅Π΄ΠΊΠΎΠ². Достоинства Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² большСй гибкости. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² C++. Из Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Python ΠΈ Π­ΠΉΡ„Π΅Π»ΡŒ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС поддСрТиваСтся Π² языкС UML.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС — ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ источник ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·-Π·Π° наличия ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ…. Π’ языках, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ наслСдники C++ (Java, C# ΠΈ Π΄Ρ€.), ΠΎΡ‚ мноТСствСнного наслСдования Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ интСрфСйсов. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· использования Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°. Однако, Ссли такая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ всС-Ρ‚Π°ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π°, Ρ‚ΠΎ, для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² использования наслСдованных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ видимости — Β«::» — для Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ родитСля.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ наличия ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ… Π±Ρ‹Π»Π° прСдпринята Π² языкС Π­ΠΉΡ„Π΅Π»ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈ описании Π½ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· наслСдуСмых классов ΠΈ ΠΈΡ… ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ классС.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования (C#, Java, Delphi ΠΈ Π΄Ρ€.) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ класса-ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… интСрфСйсов ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ классом. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ мноТСствСнноС наслСдованиС — ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйсов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ явно, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ошибки ΠΏΡ€ΠΈ наслСдовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов-ΠΏΡ€Π΅Π΄ΠΊΠΎΠ².

Π•Π΄ΠΈΠ½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс

Π’ рядС языков программирования всС классы явно ΠΈΠ»ΠΈ нСявно Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Π½Π΅ΠΊΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Smalltalk Π±Ρ‹Π» ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… языков, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использовалась эта концСпция. К Ρ‚Π°ΠΊΠΈΠΌ языкам относятся Objective-C (NSObject), Perl (UNIVERSAL), Eiffel (ANY), Java (java.lang.Object), C# (System.Object), Delphi (TObject).

НаслСдованиС Π² языках программирования

Visual Basic

НаслСдованиС в Visual Basic:

Class A 'Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс
End Class
 
Class B : Inherits A    'наслСдованиС ΠΎΡ‚ A
End Class
 
Noninheritable Class C     'Класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСльзя Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ (final Π² Java)
End Class
 
MustInherit Class Z 'Класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ (абстрактный класс)
End Class

C++

НаслСдованиС в C++:

class A{    //Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс
};
 
class B : public A{    //public наслСдованиС
};
 
class C : protected A{    //protected наслСдованиС
};
 
class Z : private A{    //private наслСдованиС
};

Π’ C++ сущСствуСт Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° наслСдования: public, protected, private. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа Ρ‡Π»Π΅Π½ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ANSI ISO IEC 14882 2003

Если класс объявлСн ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса со спСцификатором доступа public, Ρ‚ΠΎΠ³Π΄Π° public Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса доступны ΠΊΠ°ΠΊ public Ρ‡Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, protected Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса доступны ΠΊΠ°ΠΊ protected Ρ‡Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

Если класс объявлСн ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса со спСцификатором доступа protected, Ρ‚ΠΎΠ³Π΄Π° public ΠΈ protected Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса доступны ΠΊΠ°ΠΊ protected Ρ‡Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

Если класс объявлСн ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса со спСцификатором доступа private, Ρ‚ΠΎΠ³Π΄Π° public ΠΈ protected Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса доступны ΠΊΠ°ΠΊ private Ρ‡Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

\ANSI ISO IEC 14882 2003

Одним ΠΈΠ· основных прСимущСств public-наслСдования являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° классы-наслСдники ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСявно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

Π­Ρ‚Π° интСрСсная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСской ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° (RTTI).

Delphi (Object Pascal)

Для использования ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° наслСдования Π² Delphi Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² объявлСнии класса справа ΠΎΡ‚ слова class ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ класс ΠΏΡ€Π΅Π΄ΠΎΠΊ:

ΠŸΡ€Π΅Π΄ΠΎΠΊ:

TAncestor = class
private
protected
public
  // Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°
  procedure VirtualProcedure; virtual; abstract; 
  procedure StaticProcedure;
end;

НаслСдник:

TDescendant = class(TAncestor)
private
protected
public
  // ΠŸΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹
  procedure VirtualProcedure; override;
  procedure StaticProcedure;
end;

ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС классы Π² Delphi ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ класса TObject. Если класс-ΠΏΡ€Π΅Π΄ΠΎΠΊ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ подразумСваСтся, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ класс являСтся прямым ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ класса TObject.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС Π² Delphi частично поддСрТиваСтся Π·Π° счёт использования классов-ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠ² (Π‘lass Helpers).

Python

Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅, Ρ‚Π°ΠΊ ΠΈ мноТСствСнноС наслСдованиС. ΠŸΡ€ΠΈ доступС ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ порядок просмотра ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов называСтся порядком Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Π°Π½Π³Π».Β method resolution order)[1].

class Ancestor1(object):   # ΠŸΡ€Π΅Π΄ΠΎΠΊ 1
    def m1(self): pass
class Ancestor2(object):   # ΠŸΡ€Π΅Π΄ΠΎΠΊ 2
    def m1(self): pass
class Descendant(Ancestor1, Ancestor2):   # НаслСдник
    def m2(self): pass
 
d = Descendant()           # инстанциация
print d.__class__.__mro__  # порядок Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:
(<class '__main__.Descendant'>, <class '__main__.Ancestor1'>, <class '__main__.Ancestor2'>, <type 'object'>)

Π‘ вСрсии Python 2.2 Π² языкС ΡΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ «классичСскиС» классы ΠΈ Β«Π½ΠΎΠ²Ρ‹Π΅Β» классы. ПослСдниС ΡΠ²Π»ΡΡŽΡ‚ΡΡ наслСдниками object. Β«ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠ΅Β» классы Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ вСрсии 2.6, Π½ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· языка Π² Python вСрсии 3.0.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС примСняСтся Π² Python, Π² частности, для ввСдСния Π² основной класс классов-примСсСй (Π°Π½Π³Π».Β mix-in).

PHP

Для использования ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° наслСдования Π² PHP Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² объявлСнии класса послС ΠΈΠΌΠ΅Π½ΠΈ объявляСмого класса-наслСдника ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ слово extends ΠΈ имя класса-ΠΏΡ€Π΅Π΄ΠΊΠ°:

class Descendant extends Ancestor {
}

Π’ случаС пСрСкрытия классом-наслСдником свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΊΠ°, доступ ΠΊ свойствам ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова parent:

class A {
  function example() {
    echo "Π’Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ A::example().<br />\n";
  }
}
 
class B extends A {
  function example() {
    echo "Π’Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ B::example().<br />\n";
    parent::example();
  }
}

Objective-C

@interface MyNumber : NSObject { 
   int num;
}
- (int) num;
- (void) setNum: (int) theNum;
@end
 
@implementation
- (id) init { 
   self = [super init];
   return self;
}
 
- (int) num {
   return num;
}
 
- (void) setNum: (int) theNum {
   num = theNum;
}
@end

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π² интСрфСйсС.

Java

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ наслСдования ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈ Π΄Π²ΡƒΡ… интСрфСйсов:

        public class A { }
        public interface I1 { }
        public interface I2 { }
        public class B extends A implements I1, I2 { }

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° final Π² объявлСнии класса Π΄Π΅Π»Π°Π΅Ρ‚ наслСдованиС ΠΎΡ‚ Π½Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

C#

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ наслСдования ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈ Π΄Π²ΡƒΡ… интСрфСйсов:

        public class A { }
        public interface I1 { }
        public interface I2 { }
        public class B : A, I1, I2 { }

НаслСдованиС ΠΎΡ‚ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… классов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ, ΡƒΠΊΠ°Π·Π°Π² фиксированный Ρ‚ΠΈΠΏ, Π»ΠΈΠ±ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ пСрСноса ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Π² наслСдуСмый класс:

        public class A<T>
        { }
        public class B : A<int>
        { }
        public class B2<T> : A<T>
        { }

Допустимо Ρ‚Π°ΠΊΠΆΠ΅ наслСдованиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов ΠΎΡ‚ классов, ΠΈΡ… содСрТащих:

    class A
    {
        public class B : A { }
    }

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° sealed Π² объявлСнии класса Π΄Π΅Π»Π°Π΅Ρ‚ наслСдованиС ΠΎΡ‚ Π½Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.[2]

Ruby

class Parent
 
  def public_method
    "Public method"
  end
 
  private
 
    def private_method
      "Private method"
    end
 
end
 
class Children < Parent
 
  def public_method
    "Redefined public method"
  end
 
  def call_private_method
    "Ancestor's private method: " + private_method
  end
 
end

Класс Parent являСтся ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ для класса Children, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ public_method.

children = Children.new
children.public_method #=> "Redefined public method"
children.call_private_method #=> "Ancestor's private method: Private method"

ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· наслСдников.

JavaScript

var Parent = function( data ) {
    this.data = data || false;
    this.public_method = function() { return 'Public Method'; }
}
 
var Child = function() {
    this.public_method = function() { return 'Redefined public method'; }
    this.getData = function() { return 'Data: ' + this.data; }
}
 
Child.prototype = new Parent('test');
var Test = new Child();
 
Test.getData(); // => "Data: test"
Test.public_method(); // => "Redefined public method"
Test.data; // => "test"

Класс Parent являСтся ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ для класса Children, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ public_method. Π’ JavaScript ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ наслСдованиС.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ дСструкторы

Π’ Π‘++ конструкторы ΠΏΡ€ΠΈ наслСдовании Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ самого Ρ€Π°Π½Π½Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° Π΄ΠΎ самого ΠΏΠΎΠ·Π΄Π½Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°, Π° дСструкторы Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚Β β€” ΠΎΡ‚ самого ΠΏΠΎΠ·Π΄Π½Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Π΄ΠΎ самого Ρ€Π°Π½Π½Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°.

class First
{
public:
    First()  { cout << ">>First constructor" << endl; }
    ~First() { cout << ">>First destructor" << endl; }
};
 
class Second: public First
{
public:
    Second()  { cout << ">Second constructor" << endl; }
    ~Second() { cout << ">Second destructor" << endl; }
};
 
class Third: public Second
{
public:
    Third()  { cout << "Third constructor" << endl; }
    ~Third() { cout << "Third destructor" << endl; }
};
 
// Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
Third *th = new Third();
delete th;
 
// Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π°
/*
>>First constructor
>Second constructor
Third constructor
 
Third destructor
>Second destructor
>>First destructor
*/

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ

Бсылки

dic.academic.ru

6. ИспользованиС наслСдования ΠΏΡ€ΠΈ создании класса.

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

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, класс-наслСдник Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс). Π­Ρ‚ΠΎ позволяСт ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса-наслСдника Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ наслСдованиС

Класс, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ наслСдованиС, Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡΒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΒ ΠΈΠ»ΠΈΒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΒ (Π°Π½Π³Π».Β base class). ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡΒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ,наслСдниками или производными классами (Π°Π½Π³Π».Β derived class).

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

Основная ΡΡ‚Π°Ρ‚ΡŒΡ:Β ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

ΠŸΡ€ΠΈ мноТСствСнном наслСдовании Ρƒ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. Π’ этом случаС класс наслСдуСт мСтоды всСх ΠΏΡ€Π΅Π΄ΠΊΠΎΠ². Достоинства Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² большСй гибкости. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²Β C++. Из Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒΒ PythonΒ ΠΈΒ Π­ΠΉΡ„Π΅Π»ΡŒ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС поддСрТиваСтся Π² языкС UML.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС — ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ источник ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·-Π·Π° наличия ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ…. Π’ языках, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ наслСдники C++ (Java,Β C#Β ΠΈ Π΄Ρ€.), ΠΎΡ‚ мноТСствСнного наслСдования Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·ΡƒΒ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠΎΠ². ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· использования Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°. Однако, Ссли такая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ всС-Ρ‚Π°ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π°, Ρ‚ΠΎ, для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² использования наслСдованных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ видимости — Β«::» — для Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ родитСля.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ наличия ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ… Π±Ρ‹Π»Π° прСдпринята Π² ΡΠ·Ρ‹ΠΊΠ΅Β Π­ΠΉΡ„Π΅Π»ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈ описании Π½ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· наслСдуСмых классов ΠΈ ΠΈΡ… ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ классС.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования (C#,Β Java,Β DelphiΒ ΠΈ Π΄Ρ€.) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ класса-ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… интСрфСйсов ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ классом. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ мноТСствСнноС наслСдованиС — ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйсов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ явно, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ошибки ΠΏΡ€ΠΈ наслСдовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов-ΠΏΡ€Π΅Π΄ΠΊΠΎΠ².

studfiles.net

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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

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