Каждый уважающий себя программист должен уметь работать с языками программирования, которые относятся к Си-семейству. Это – современный подход при написании разнообразного контента. В основном упор делается на C++. Профессиональные разработчики способны применять данную «лексику» как для элементарных, так и для крупных запутанных задач.
Каждый язык имеет собственные нюансы, алгоритмы, объекты и функции. Немаловажным моментом является так называемое наследование. Зная, что это такое, можно с легкостью составить довольно сложный программный код с минимальными усилиями. В статье будут рассмотрены принципы наследования в C++ и C#.
Основная терминология
Для того, чтобы хорошо разбираться в дальнейшей информации, пользователю предстоит изучить некоторые термины:
- Базовый класс – некий класс, который выступает «базисом» при наследовании производным классом.
- Деструкторы – методы класса, необходимые для деинициализации объекта.
- Идентификатор – уникальное имя, присваиваемое функциям, переменным, иным объектам программирования.
- Инкапсуляция – механизмы, связывающие коды (операции) с информацией, коими происходит манипуляция. Осуществляется дополнительная защита от внешнего вмешательства и неправильного задействования.
- Класс – шаблоны, определяющие тот или иной объект в программе, его форму.
- Конструкторы – методы классов. Используются для инициализации элементов.
- Массивы – коллекции переменных одного и того же вида. К ним обращение происходит при помощи общих имен.
- Переменная – основная единица при составлении машинного кода. Элемент памяти, которому присвоили имя и значение.
- Полиморфизм – свойство классов решать похожие задачи разными способами. Одно имя используется сразу для нескольких методов, обладающих похожими друг на друга назначениями.
- Производный класс – своеобразный класс, наследующий от базового.
- Рекурсия – операция, при которой функция вызывает сама себя.
- Строка (String name) – последовательность символов (с именем), заключенная в двойные кавычки.
- Структура – образец, определяющий форму объекта. От класса отличается тем, что все его составляющие являются открытыми изначально.
- Указатели – маркеры/объекты, хранящие в себе адреса памяти.
- Функции – подпрограмма или операция, которая используется при решении тех или иных задач.
Все это обязательно поможет каждому программисту. Предложенна�� терминология используется не только в Си-семействе, но и в остальных programming languages.
О классах C++
Программист, который может написать утилиту на C++ — это настоящий профессионал. Но для того, чтобы справиться с поставленной задачей, приходится изучать разнообразные особенности «лексики».
Немаловажный раздел – это классы и объекты. Они тесно связаны с так называемым наследованием, на котором будет заострено внимание далее.
Классом принято в C++ называть абстракции, которые описывают методы и свойства элементов, которых не существует. Объекты здесь – это конкретизированное представление абстракций со своими методами и свойствами.
Экземпляры класса – составляющие утилиты, которые появились, опираясь на один класс. У них может быть совершенно разное поведение и свойства. Построить оные удается несколькими способами. А именно:
- Инкапсуляцией. С ее помощью происходит объединение в классах данных и методов. Детализация скрывается от юзера.
- Полиморфизмом. Свойство, посредством которого объекты классов с одними и теми же интерфейсами без сведений о типе и внутренней структуре могут задействоваться при необходимости.
- Наследованием. Процесс, который позволяет создавать классы-потомки. За основу берется уже существующий вариант, а характеристики «родителя» присваиваются «следующему поколению».
Для того, чтобы класс объявить, требуется задействовать ключевое слово Class. У рассматриваемого элемента есть спецификаторы доступа:
- Private – методы и свойства, которые объявлены внутри class, будут доступны только в пределах оного.
- Public – доступ предоставляется иным составляющим и функциям приложения.
- Protected – предоставляет доступ к членам класса, а также к дружественным и дочерним «составляющим». За пределами тела class доступ закрывается.
Это базис, который пригодится каждому для углубленного изучения наследования.
Наследование Си Плюс-Плюс
В Си Плюс-Плюс наследование производится между классами. Тип отношений – «является». Class, от которого осуществляется рассматриваемая «операция», называется базовым (суперклассом или родительским). Тот элемент, который «забирает» свойства и характеристики – дочерним (подклассом или производным).
Последний наследует методы и свойства (переменные). Дополнительно учитываются определенные ограничения доступа. Дочерние «составляющие» полноценны, могут обладать собственными членами. Далее будут рассматриваться примеры, помогающие разобраться в конструкторах базового класса, а также в наследовании в полной мере.
Класс «Человек»
Вот код, который поможет представить в приложении человека:
class Human
{
public:
std::string m_name;
int m_age;
Human(std::string name = "", int age = 0)
: m_name(name), m_age(age)
{
}
std::string getName() const { return m_name; }
int getAge() const { return m_age; }
};
Здесь определяются только элементы, которые служат общими для всех объектов. Все люди, независимо от половой принадлежности, профессии, возраста и других «параметров», имеют возраст и имя.
Пример предусматривает спецификатор public. Отсюда следует, что имеющиеся переменные и методы открытые. Но можно сделать их «приватными», как это обычно бывает. Данный прием позволяет контролировать доступ и следить за наследованием.
Внимание: программерам в процессе работы с рассматриваемым действием может потребоваться работа с include iostream. Это – элемент стандартной библиотеки в Си Плюс-Плюс, который представлен заголовочным файлом с классами, переменными и функциями.
Public Class «Игроки в баскетбол»
На основании предложенного выше кода будем работать с наследованием в Си Плюс-Плюс. Требуется написать утилиту, отслеживающую сведения о тех, кто играет в баскетбол. Сохраняется средний уровень игры, а также то, сколько очков набрал конкретный человек:
Это – незавершенный public class. Дополнительно необходимо знать имя и возраст игрока. Для этого используется первый представленный код. Вывести запрашиваемую информацию предлагается несколькими способами:
- Добавить в «Баскетбольные игроки» новые члены с соответствующими материалами. Не самый лучший выход, так как он приводит к дублированию кода.
- При помощи так называемой композиции добавить public Human в виде члена класса BasketballPlayer. Но это некорректное решение.
- Произвести настройку кода так, чтобы новый «элемент кода» наследовал те или иные атрибуты от первого. Это и есть тип отношений «является».
После изучения возможных вариантов развития событий стоит отдать предпочтение последнему.
Сделать «Баскетбольных игроков» дочерним
Для реализации поставленной задачи требуется после public class BasketballPlayer воспользоваться двоеточием. Здесь без ключевого слова public не обойтись, как и без имени классового элемента. Это – открытая операция:
Также программисты часто думают, что такое так называемое множественное наследование. Этот вопрос будет рассмотрен позже.
Вследствие проделанных манипуляций происходит «заимствование» информации от родительских классов. У «Игроков в баскетбол» имеются и собственные члены – m_points и m_gameAverage. В них есть необходимость, так как на экран выводятся не только сведения об именах и возрасте.
Полный код утилиты будет выглядеть так:
В итоге на экране появится надпись «Антон» (на английском).
Public элемент Employer
Пусть будет еще один «потомок» от Human. За основу возьмем информацию о работниках. Подчиненный – это человек. Соответственно, изучаемый процесс здесь уместен:
Сразу прописывать public в самом начале кодификации не нужно. Это нарушает структуру кода. «Сотрудник» забирает от «Человека» два метода – имя и возраст, а также обладает собственными переменными и одним методом. PrintNameAndWage() задействует переменные как из родительского «источника», так и из собственного.
Внимание: BasketballPlayer и Employer не связаны, но написаны в пределах одной и той же программы. Кодификация имеет следующий вид:
В итоге на экране появится надпись «Иван: 350».
Цепочки
Представляется возможным проводить передачу информации «потомкам» от классовых элементов, которые изначально тоже брали от «кого-то» данные. Можно для примера составить отдельный «блок» под названием Супервайзер:
Информация берется из public Employer, который когда-то получал сведения из Human.
«Заимствование» и C#
Перед тем, как задумываться, что такое так называемое множественное наследование в Си-семействе, требуется разобраться с «обычным». Теперь рассмотрим несколько примеров C#.
Принципы использования здесь будут примерно такими же, как и в уже рассмотренном варианте. Для создания «дочерних» элементов не требуется никаких особых навыков и знаний. Для того, чтобы было проще работать с кодом, будем использовать тип public. Это поможет избежать появления дополнительных окон и сообщений об ошибке при получении доступа к запрашиваемым сведениям.
Важно учитывать, что:
- C# предусматривает одиночное «заимствование». От двух и более public (или иных) классовых составляющих процесс производиться не может.
- Отношение наследования – некоторое отношение, демонстрирующее переход от общей абстракции к конкретной.
- Абстрактный классовых «объект» — классовая составляющая, объекты которого нельзя создавать. Ключевое слово new здесь не используется. Элемент задействуется в качестве прародителя.
- Sealed – слово, которое позволяет устанавливать запрет на наследников. Пример — string. Права «заимствования» здесь не имеют места.
- Virtual – превращает метод в виртуальный, чтобы использовать предопределение наследников.
Все это поможет в дальнейших примерах. Пока рано задумываться, что такое часто применяемое множественное наследование, потому как не все разбираются в обычном. Ниже будет наглядный пример «манипуляции» в C#.
Пример «Животные» и конструкторы
Пусть будет классовый элемент Animal. В нем будут создаваться поля и методы, характерные для всей «живности»:
- вес;
- сколько живет (в среднем);
- наличие хвоста;
- что ест.
От него сделаем дочернюю классовую составляющую (тоже public) – «Собака». Исходный код:
Стоит обратить внимание на то, что «заимствованию» в Шарпе не подлежат так называемые конструкторы. Если они есть у родителей, то у наследников доступа к оным не будет. Несмотря на это, вызов будет осуществляться автоматически. Это – дефолтный конструктор. Чтобы его вызвать, рекомендуется использовать ключевик base.
Пусть будет некая классовая составляющая Degree, в котором выставлены градусы, а также метод, возвращающий его значение. Дочерним создадим Radiance. Он будет переводить информацию в радианы:
Внимание: запись public virtual делает информацию виртуальной.
Множественное наследование в C
До сих пор рассматривалось лишь «заимствование», которое предусматривало одиночный вариант. Дочерний классовый элемент в таком случае предусматривает только одного родителя (для удобства используется тип public). Но Си-семейство предусматривает и множественный «подход».
В С++
Множественный «метод» — это когда у дочернего классового «объекта» будет несколько предков. Пример – отслеживание работы преподавателей. Работать будем с предыдущими элементами кода. Учитель – это человек, но также он будет подчиненным.
Задумываясь, что такое в Си-семействе множественное наследование, стоит обращать внимание на логические связи. Без них освоить рассматриваемое направление невозможно. Поэтому создадим новый классовый «объект» под названием «Учитель».
Чтобы реализовать подход, потребуется:
- присвоить переменным (int main или другим) для удобства «тип» public;
- прописать «стандартную» запись «заимствования»;
- через запятую указать тип «заимствования», а также второго родителя.
В конечном итоге получится такой код:
В предложенном примере используется «заимствование» типа public.
Возможные неурядицы
Несмотря на то, что рассмотренный прием – это довольно быстрое и простое расширение «базисного», его применение на практике способно привести в определенным ошибкам. Сложность утилит увеличивается. Поддержка кода способна стать настоящей проблемой.
Рассмотрим несколько наиболее распространенных ситуаций:
1.Возникновение неоднозначности. Такие ситуации возникают, когда у нескольких родителей имеются методы с одинаковыми именами. Здесь при компилировании «c54G…» просматривает наличие метода getID() у «Wireless…», который отсутствует. В итоге компилятор продвинется вверх по цепи, отыщет у родительских классовых элементов соответствующий «объект». Он обнаружен у USB и Network. В результате появится сообщение об ошибке, так как компилятор не поймет, какой именно ID использовать.
Для исправления ситуации достаточно внести уточнение:
2.«Алмаз смерти» или «Алмаз обреченности». Так называют ситуацию, при которой у классового элемента 2 родителя, каждый из которых уже наследовал свойства одного и того же «прародителя»:
Во втором случае сканеры и принтеры служат устройствами. Питаются от розетки и получают свойства «Powered…». Но ксерокс объединяет эти два девайса. Поддержка такого кода способна привести не только в медленной работе утилиты, но и к непредвиденным поворотам.
В C#
Также стоит выяснить, что такое упомянутое ранее множественное наследование, но уже в Си Шарп. Работать, как и в прошлых случаях, будем с public, несмотря на то, что обычно переменные и другие составляющие бывают private.
Об интерфейсах
Но сначала обратим внимание на немаловажный момент – интерфейсы. Это инструмент реализации полиморфизма. Некий набор методов, обеспечиваемый классовыми составляющими, воплощающими в жизнь этот самый интерфейс.
Содержит сигнатуры. Не может включать в себя:
- конструкторы;
- константы;
- поля;
- статистические составляющие.
Объявляется и используется по следующему примеру:
Вот ситуация, при которой класс должен реализовывать интерфейс посредством предоставления реализации всех членов последнего:
Интерфейсы необходимы для множественного «заимствования».
О непосредственном «перенятии»
Множественное наследование в C – это процесс перенятия классовой составляющей сразу от двух родителей. В Шарпе данный вариант используется редко, так как ему на смену пришли интерфейсы. Здесь классовая составляющая способна реализовывать сразу несколько interfaces. Несмотря на это, «идентификатор» public в Sharp применяется, и весьма часто.
При реализации нескольких интерфейсов используется разделительный символ «запятая». Кодификация окажется следующей:
Тут:
- Интерфейсом объявлен некий IDrawable. Это – метод рисования некоторого числа объектов.
- Может реализовывать Image.
- Circle и Image – разные сущности без базового class. Для устранения неполадок создается указатель на «главный» public интерфейс.
Так, в Шарпе для «перенятия» множественного типа задействованы или abstract classes, или интерфейсы.
Также вам может быть интересен курс «Программист C» в Otus.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Все о наследовании в Си-семействе OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Каждый уважающий себя программист должен уметь работать с языками программирования, которые относятся к Си-семейству. Это – современный подход при написании разнообразного контента. В основном упор делается на C++. Профессиональные разработчики способны применять данную «лексику» как для элементарных, так и для крупных запутанных задач. Каждый язык имеет собственные нюансы, алгоритмы, объекты и функции. Немаловажным моментом является" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/vse-o-nasledovanii-v-si-semejstve/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#article","name":"\u0412\u0441\u0435 \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0421\u0438-\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 OTUS","headline":"\u0412\u0441\u0435 \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0421\u0438-\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/08\/oj-1080x720-9-1.png","width":1080,"height":720},"datePublished":"2021-08-25T18:59:50+00:00","dateModified":"2022-04-26T17:34:56+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, C, c++, \u0421\u0438"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#listItem","position":2,"name":"\u0412\u0441\u0435 \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0421\u0438-\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#webpage","url":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/","name":"\u0412\u0441\u0435 \u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0421\u0438-\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 OTUS","description":"\u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0432\u0430\u0436\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0431\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044f\u0437\u044b\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0421\u0438-\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0443. \u042d\u0442\u043e \u2013 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0443\u043f\u043e\u0440 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 C++. \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u00ab\u043b\u0435\u043a\u0441\u0438\u043a\u0443\u00bb \u043a\u0430\u043a \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0445, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041a\u0430\u0436\u0434\u044b\u0439 \u044f\u0437\u044b\u043a \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u044b\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/08\/oj-1080x720-9-1.png","@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/vse-o-nasledovanii-v-si-semejstve\/#mainImage"},"datePublished":"2021-08-25T18:59:50+00:00","dateModified":"2022-04-26T17:34:56+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/1881" /><link rel='shortlink' href='https://otus.ru/journal/?p=1881' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-nasledovanii-v-si-semejstve%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-nasledovanii-v-si-semejstve%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-1881 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-1881" class="the-post post-1881 post type-post status-publish format-standard has-post-thumbnail category-polza tag-c-3 tag-c tag-si">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Все о наследовании в Си-семействе
</h1>
<a href="https://otus.ru/journal/vse-o-nasledovanii-v-si-semejstve/" class="date-link" data-wpel-link="internal"><time class="post-date">25 августа, 2021</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-9-1.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Все о наследовании в Си-семействе" title="Все о наследовании в Си-семействе" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-9-1-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-9-1-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-9-1-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-9-1-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-9-1-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-9-1-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F" title="Основная терминология">Основная терминология</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9E_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%D1%85_C" title="О классах C++">О классах C++</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A1%D0%B8_%D0%9F%D0%BB%D1%8E%D1%81-%D0%9F%D0%BB%D1%8E%D1%81" title="Наследование Си Плюс-Плюс">Наследование Си Плюс-Плюс</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9A%D0%BB%D0%B0%D1%81%D1%81_%C2%AB%D0%A7%D0%B5%D0%BB%D0%BE%D0%B2%D0%B5%D0%BA%C2%BB" title="Класс «Человек»">Класс «Человек»</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#Public_Class_%C2%AB%D0%98%D0%B3%D1%80%D0%BE%D0%BA%D0%B8_%D0%B2_%D0%B1%D0%B0%D1%81%D0%BA%D0%B5%D1%82%D0%B1%D0%BE%D0%BB%C2%BB" title="Public Class «Игроки в баскетбол»">Public Class «Игроки в баскетбол»</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%A1%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%C2%AB%D0%91%D0%B0%D1%81%D0%BA%D0%B5%D1%82%D0%B1%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B8%D0%B3%D1%80%D0%BE%D0%BA%D0%BE%D0%B2%C2%BB_%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B8%D0%BC" title="Сделать «Баскетбольных игроков» дочерним">Сделать «Баскетбольных игроков» дочерним</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#Public_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82_Employer" title="Public элемент Employer">Public элемент Employer</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%A6%D0%B5%D0%BF%D0%BE%D1%87%D0%BA%D0%B8" title="Цепочки">Цепочки</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#%C2%AB%D0%97%D0%B0%D0%B8%D0%BC%D1%81%D1%82%D0%B2%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%C2%BB_%D0%B8_C" title="«Заимствование» и C#">«Заимствование» и C#</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%C2%AB%D0%96%D0%B8%D0%B2%D0%BE%D1%82%D0%BD%D1%8B%D0%B5%C2%BB_%D0%B8_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D1%8B" title="Пример «Животные» и конструкторы">Пример «Животные» и конструкторы</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_C" title="Множественное наследование в C">Множественное наследование в C</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%92_%D0%A1" title="В С++">В С++</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D1%83%D1%80%D1%8F%D0%B4%D0%B8%D1%86%D1%8B" title="Возможные неурядицы">Возможные неурядицы</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%92_C" title="В C#">В C#</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%9E%D0%B1_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B0%D1%85" title="Об интерфейсах">Об интерфейсах</a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%9E_%D0%BD%D0%B5%D0%BF%D0%BE%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC_%C2%AB%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D1%8F%D1%82%D0%B8%D0%B8%C2%BB" title="О непосредственном «перенятии»">О непосредственном «перенятии»</a></li></ul></li></ul></li></ul></nav></div>
<p>Каждый уважающий себя программист должен уметь работать с языками программирования, которые относятся к Си-семейству. Это – современный подход при написании разнообразного контента. В основном упор делается на C++. Профессиональные разработчики способны применять данную «лексику» как для элементарных, так и для крупных запутанных задач.</p>
<p>Каждый язык имеет собственные нюансы, алгоритмы, объекты и функции. Немаловажным моментом является так называемое наследование. Зная, что это такое, можно с легкостью составить довольно сложный программный код с минимальными усилиями. В статье будут рассмотрены принципы наследования в C++ и C#.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F"></span>Основная терминология<span class="ez-toc-section-end"></span></h2>
<p>Для того, чтобы хорошо разбираться в дальнейшей информации, пользователю предстоит изучить некоторые термины:</p>
<ol type="1"><li>Базовый класс – некий класс, который выступает «базисом» при наследовании производным классом.</li><li>Деструкторы – методы класса, необходимые для деинициализации объекта.</li><li>Идентификатор – уникальное имя, присваиваемое функциям, переменным, иным объектам программирования.</li><li>Инкапсуляция – механизмы, связывающие коды (операции) с информацией, коими происходит манипуляция. Осуществляется дополнительная защита от внешнего вмешательства и неправильного задействования.</li><li>Класс – шаблоны, определяющие тот или иной объект в программе, его форму.</li><li>Конструкторы – методы классов. Используются для инициализации элементов.</li><li>Массивы – коллекции переменных одного и того же вида. К ним обращение происходит при помощи общих имен.</li><li>Переменная – основная единица при составлении машинного кода. Элемент памяти, которому присвоили имя и значение.</li><li>Полиморфизм – свойство классов решать похожие задачи разными способами. Одно имя используется сразу для нескольких методов, обладающих похожими друг на друга назначениями.</li><li>Производный класс – своеобразный класс, наследующий от базового.</li><li>Рекурсия – операция, при которой функция вызывает сама себя.</li><li>Строка (String name) – последовательность символов (с именем), заключенная в двойные кавычки.</li><li>Структура – образец, определяющий форму объекта. От класса отличается тем, что все его составляющие являются открытыми изначально.</li><li>Указатели – маркеры/объекты, хранящие в себе адреса памяти.</li><li>Функции – подпрограмма или операция, которая используется при решении тех или иных задач.</li></ol>
<p>Все это обязательно поможет каждому программисту. Предложенная терминология используется не только в Си-семействе, но и в остальных programming languages.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%D1%85_C"></span>О классах C++<span class="ez-toc-section-end"></span></h2>
<p>Программист, который может написать утилиту на C++ — это настоящий профессионал. Но для того, чтобы справиться с поставленной задачей, приходится изучать разнообразные особенности «лексики».</p>
<p>Немаловажный раздел – это классы и объекты. Они тесно связаны с так называемым наследованием, на котором будет заострено внимание далее.</p>
<p>Классом принято в C++ называть абстракции, которые описывают методы и свойства элементов, которых не существует. Объекты здесь – это конкретизированное представление абстракций со своими методами и свойствами.</p>
<p>Экземпляры класса – составляющие утилиты, которые появились, опираясь на один класс. У них может быть совершенно разное поведение и свойства. Построить оные удается несколькими способами. А именно:</p>
<ol type="1"><li>Инкапсуляцией. С ее помощью происходит объединение в классах данных и методов. Детализация скрывается от юзера.</li><li>Полиморфизмом. Свойство, посредством которого объекты классов с одними и теми же интерфейсами без сведений о типе и внутренней структуре могут задействоваться при необходимости.</li><li>Наследованием. Процесс, который позволяет создавать классы-потомки. За основу берется уже существующий вариант, а характеристики «родителя» присваиваются «следующему поколению».</li></ol>
<p>Для того, чтобы класс объявить, требуется задействовать ключевое слово Class. У рассматриваемого элемента есть спецификаторы доступа:</p>
<ol type="1"><li>Private – методы и свойства, которые объявлены внутри class, будут доступны только в пределах оного.</li><li>Public – доступ предоставляется иным составляющим и функциям приложения.</li><li>Protected – предоставляет доступ к членам класса, а также к дружественным и дочерним «составляющим». За пределами тела class доступ закрывается.</li></ol>
<p>Это базис, который пригодится каждому для углубленного изучения наследования.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A1%D0%B8_%D0%9F%D0%BB%D1%8E%D1%81-%D0%9F%D0%BB%D1%8E%D1%81"></span>Наследование Си Плюс-Плюс<span class="ez-toc-section-end"></span></h2>
<p>В Си Плюс-Плюс наследование производится между классами. Тип отношений – «является». Class, от которого осуществляется рассматриваемая «операция», называется базовым (суперклассом или родительским). Тот элемент, который «забирает» свойства и характеристики – дочерним (подклассом или производным).</p>
<p>Последний наследует методы и свойства (переменные). Дополнительно учитываются определенные ограничения доступа. Дочерние «составляющие» полноценны, могут обладать собственными членами. Далее будут рассматриваться примеры, помогающие разобраться в конструкторах базового класса, а также в наследовании в полной мере.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D0%B0%D1%81%D1%81_%C2%AB%D0%A7%D0%B5%D0%BB%D0%BE%D0%B2%D0%B5%D0%BA%C2%BB"></span>Класс «Человек»<span class="ez-toc-section-end"></span></h3>
<p>Вот код, который поможет представить в приложении человека:</p>
<pre class="wp-block-code"><code>class Human
{
public:
std::string m_name;
int m_age;
Human(std::string name = "", int age = 0)
: m_name(name), m_age(age)
{
}
std::string getName() const { return m_name; }
int getAge() const { return m_age; }
};</code></pre>
<p>Здесь определяются только элементы, которые служат общими для всех объектов. Все люди, независимо от половой принадлежности, профессии, возраста и других «параметров», имеют возраст и имя.</p>
<p>Пример предусматривает спецификатор public. Отсюда следует, что имеющиеся переменные и методы открытые. Но можно сделать их «приватными», как это обычно бывает. Данный прием позволяет контролировать доступ и следить за наследованием.</p>
<p>Внимание: программерам в процессе работы с рассматриваемым действием может потребоваться работа с include iostream. Это – элемент стандартной библиотеки в Си Плюс-Плюс, который представлен заголовочным файлом с классами, переменными и функциями.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Public_Class_%C2%AB%D0%98%D0%B3%D1%80%D0%BE%D0%BA%D0%B8_%D0%B2_%D0%B1%D0%B0%D1%81%D0%BA%D0%B5%D1%82%D0%B1%D0%BE%D0%BB%C2%BB"></span>Public Class «Игроки в баскетбол»<span class="ez-toc-section-end"></span></h3>
<p>На основании предложенного выше кода будем работать с наследованием в Си Плюс-Плюс. Требуется написать утилиту, отслеживающую сведения о тех, кто играет в баскетбол. Сохраняется средний уровень игры, а также то, сколько очков набрал конкретный человек:</p>
<figure class="wp-block-image size-large"><img decoding="async" width="863" height="221" src="https://otus.ru/journal/wp-content/uploads/2021/08/1-24.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1883" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/1-24.jpg 863w, https://otus.ru/journal/wp-content/uploads/2021/08/1-24-300x77.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/1-24-150x38.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/08/1-24-768x197.jpg 768w" sizes="(max-width: 863px) 100vw, 863px" /></figure>
<p>Это – незавершенный public class. Дополнительно необходимо знать имя и возраст игрока. Для этого используется первый представленный код. Вывести запрашиваемую информацию предлагается несколькими способами:</p>
<ol type="1"><li>Добавить в «Баскетбольные игроки» новые члены с соответствующими материалами. Не самый лучший выход, так как он приводит к дублированию кода.</li><li>При помощи так называемой композиции добавить public Human в виде члена класса BasketballPlayer. Но это некорректное решение.</li><li>Произвести настройку кода так, чтобы новый «элемент кода» наследовал те или иные атрибуты от первого. Это и есть тип отношений «является».</li></ol>
<p>После изучения возможных вариантов развития событий стоит отдать предпочтение последнему.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%C2%AB%D0%91%D0%B0%D1%81%D0%BA%D0%B5%D1%82%D0%B1%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B8%D0%B3%D1%80%D0%BE%D0%BA%D0%BE%D0%B2%C2%BB_%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B8%D0%BC"></span>Сделать «Баскетбольных игроков» дочерним<span class="ez-toc-section-end"></span></h3>
<p>Для реализации поставленной задачи требуется после public class BasketballPlayer воспользоваться двоеточием. Здесь без ключевого слова public не обойтись, как и без имени классового элемента. Это – открытая операция:</p>
<figure class="wp-block-image size-large"><img decoding="async" width="863" height="242" src="https://otus.ru/journal/wp-content/uploads/2021/08/2-5.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1884" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/2-5.jpg 863w, https://otus.ru/journal/wp-content/uploads/2021/08/2-5-300x84.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/2-5-150x42.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/08/2-5-768x215.jpg 768w" sizes="(max-width: 863px) 100vw, 863px" /></figure>
<p>Также программисты часто думают, что такое так называемое множественное наследование. Этот вопрос будет рассмотрен позже.</p>
<p>Вследствие проделанных манипуляций происходит «заимствование» информации от родительских классов. У «Игроков в баскетбол» имеются и собственные члены – m_points и m_gameAverage. В них есть необходимость, так как на экран выводятся не только сведения об именах и возрасте.</p>
<p>Полный код утилиты будет выглядеть так:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="659" height="558" src="https://otus.ru/journal/wp-content/uploads/2021/08/3-5.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1885" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/3-5.jpg 659w, https://otus.ru/journal/wp-content/uploads/2021/08/3-5-300x254.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/3-5-150x127.jpg 150w" sizes="(max-width: 659px) 100vw, 659px" /></figure>
<p>В итоге на экране появится надпись «Антон» (на английском).</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Public_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82_Employer"></span>Public элемент Employer<span class="ez-toc-section-end"></span></h3>
<p>Пусть будет еще один «потомок» от Human. За основу возьмем информацию о работниках. Подчиненный – это человек. Соответственно, изучаемый процесс здесь уместен:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="915" height="304" src="https://otus.ru/journal/wp-content/uploads/2021/08/4-4.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1886" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/4-4.jpg 915w, https://otus.ru/journal/wp-content/uploads/2021/08/4-4-300x100.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/4-4-150x50.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/08/4-4-768x255.jpg 768w" sizes="(max-width: 915px) 100vw, 915px" /></figure>
<p>Сразу прописывать public в самом начале кодификации не нужно. Это нарушает структуру кода. «Сотрудник» забирает от «Человека» два метода – имя и возраст, а также обладает собственными переменными и одним методом. PrintNameAndWage() задействует переменные как из родительского «источника», так и из собственного.</p>
<p>Внимание: BasketballPlayer и Employer не связаны, но написаны в пределах одной и той же программы. Кодификация имеет следующий вид:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="658" height="587" src="https://otus.ru/journal/wp-content/uploads/2021/08/5-4.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1887" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/5-4.jpg 658w, https://otus.ru/journal/wp-content/uploads/2021/08/5-4-300x268.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/5-4-150x134.jpg 150w" sizes="(max-width: 658px) 100vw, 658px" /></figure>
<p>В итоге на экране появится надпись «Иван: 350».</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A6%D0%B5%D0%BF%D0%BE%D1%87%D0%BA%D0%B8"></span>Цепочки<span class="ez-toc-section-end"></span></h3>
<p>Представляется возможным проводить передачу информации «потомкам» от классовых элементов, которые изначально тоже брали от «кого-то» данные. Можно для примера составить отдельный «блок» под названием Супервайзер:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="912" height="199" src="https://otus.ru/journal/wp-content/uploads/2021/08/1-25.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1888" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/1-25.jpg 912w, https://otus.ru/journal/wp-content/uploads/2021/08/1-25-300x65.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/1-25-150x33.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/08/1-25-768x168.jpg 768w" sizes="(max-width: 912px) 100vw, 912px" /></figure>
<p>Информация берется из public Employer, который когда-то получал сведения из Human.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%C2%AB%D0%97%D0%B0%D0%B8%D0%BC%D1%81%D1%82%D0%B2%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%C2%BB_%D0%B8_C"></span>«Заимствование» и C#<span class="ez-toc-section-end"></span></h2>
<p>Перед тем, как задумываться, что такое так называемое множественное наследование в Си-семействе, требуется разобраться с «обычным». Теперь рассмотрим несколько примеров C#.</p>
<p>Принципы использования здесь будут примерно такими же, как и в уже рассмотренном варианте. Для создания «дочерних» элементов не требуется никаких особых навыков и знаний. Для того, чтобы было проще работать с кодом, будем использовать тип public. Это поможет избежать появления дополнительных окон и сообщений об ошибке при получении доступа к запрашиваемым сведениям.</p>
<p>Важно учитывать, что:</p>
<ol type="1"><li>C# предусматривает одиночное «заимствование». От двух и более public (или иных) классовых составляющих процесс производиться не может.</li><li>Отношение наследования – некоторое отношение, демонстрирующее переход от общей абстракции к конкретной.</li><li>Абстрактный классовых «объект» — классовая составляющая, объекты которого нельзя создавать. Ключевое слово new здесь не используется. Элемент задействуется в качестве прародителя.</li><li>Sealed – слово, которое позволяет устанавливать запрет на наследников. Пример — string. Права «заимствования» здесь не имеют места.</li><li>Virtual – превращает метод в виртуальный, чтобы использовать предопределение наследников.</li></ol>
<p>Все это поможет в дальнейших примерах. Пока рано задумываться, что такое часто применяемое множественное наследование, потому как не все разбираются в обычном. Ниже будет наглядный пример «манипуляции» в C#.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%C2%AB%D0%96%D0%B8%D0%B2%D0%BE%D1%82%D0%BD%D1%8B%D0%B5%C2%BB_%D0%B8_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D1%8B"></span>Пример «Животные» и конструкторы<span class="ez-toc-section-end"></span></h3>
<p>Пусть будет классовый элемент Animal. В нем будут создаваться поля и методы, характерные для всей «живности»:</p>
<ul><li>вес;</li><li>сколько живет (в среднем);</li><li>наличие хвоста;</li><li>что ест.</li></ul>
<p>От него сделаем дочернюю классовую составляющую (тоже public) – «Собака». Исходный код:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="446" height="508" src="https://otus.ru/journal/wp-content/uploads/2021/08/1-26.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1889" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/1-26.jpg 446w, https://otus.ru/journal/wp-content/uploads/2021/08/1-26-263x300.jpg 263w, https://otus.ru/journal/wp-content/uploads/2021/08/1-26-132x150.jpg 132w" sizes="(max-width: 446px) 100vw, 446px" /></figure>
<p>Стоит обратить внимание на то, что «заимствованию» в Шарпе не подлежат так называемые конструкторы. Если они есть у родителей, то у наследников доступа к оным не будет. Несмотря на это, вызов будет осуществляться автоматически. Это – дефолтный конструктор. Чтобы его вызвать, рекомендуется использовать ключевик base.</p>
<p>Пусть будет некая классовая составляющая Degree, в котором выставлены градусы, а также метод, возвращающий его значение. Дочерним создадим Radiance. Он будет переводить информацию в радианы:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="791" height="389" src="https://otus.ru/journal/wp-content/uploads/2021/08/1-27.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1890" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/1-27.jpg 791w, https://otus.ru/journal/wp-content/uploads/2021/08/1-27-300x148.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/1-27-150x74.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/08/1-27-768x378.jpg 768w" sizes="(max-width: 791px) 100vw, 791px" /></figure>
<p>Внимание: запись public virtual делает информацию виртуальной.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_C"></span>Множественное наследование в C<span class="ez-toc-section-end"></span></h2>
<p>До сих пор рассматривалось лишь «заимствование», которое предусматривало одиночный вариант. Дочерний классовый элемент в таком случае предусматривает только одного родителя (для удобства используется тип public). Но Си-семейство предусматривает и множественный «подход».</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92_%D0%A1"></span>В С++<span class="ez-toc-section-end"></span></h3>
<p>Множественный «метод» — это когда у дочернего классового «объекта» будет несколько предков. Пример – отслеживание работы преподавателей. Работать будем с предыдущими элементами кода. Учитель – это человек, но также он будет подчиненным.</p>
<p>Задумываясь, что такое в Си-семействе множественное наследование, стоит обращать внимание на логические связи. Без них освоить рассматриваемое направление невозможно. Поэтому создадим новый классовый «объект» под названием «Учитель».</p>
<p>Чтобы реализовать подход, потребуется:</p>
<ul><li>присвоить переменным (int main или другим) для удобства «тип» public;</li><li>прописать «стандартную» запись «заимствования»;</li><li>через запятую указать тип «заимствования», а также второго родителя.</li></ul>
<p>В конечном итоге получится такой код:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="658" height="600" src="https://otus.ru/journal/wp-content/uploads/2021/08/1-28.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1891" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/1-28.jpg 658w, https://otus.ru/journal/wp-content/uploads/2021/08/1-28-300x274.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/1-28-150x137.jpg 150w" sizes="(max-width: 658px) 100vw, 658px" /></figure>
<p>В предложенном примере используется «заимствование» типа public.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D1%83%D1%80%D1%8F%D0%B4%D0%B8%D1%86%D1%8B"></span>Возможные неурядицы<span class="ez-toc-section-end"></span></h4>
<p>Несмотря на то, что рассмотренный прием – это довольно быстрое и простое расширение «базисного», его применение на практике способно привести в определенным ошибкам. Сложность утилит увеличивается. Поддержка кода способна стать настоящей проблемой.</p>
<p>Рассмотрим несколько наиболее распространенных ситуаций: </p>
<p>1.Возникновение неоднозначности. Такие ситуации возникают, когда у нескольких родителей имеются методы с одинаковыми именами. Здесь при компилировании «c54G…» просматривает наличие метода getID() у «Wireless…», который отсутствует. В итоге компилятор продвинется вверх по цепи, отыщет у родительских классовых элементов соответствующий «объект». Он обнаружен у USB и Network. В результате появится сообщение об ошибке, так как компилятор не поймет, какой именно ID использовать. </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="659" height="600" src="https://otus.ru/journal/wp-content/uploads/2021/08/1-29.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1892" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/1-29.jpg 659w, https://otus.ru/journal/wp-content/uploads/2021/08/1-29-300x273.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/1-29-150x137.jpg 150w" sizes="(max-width: 659px) 100vw, 659px" /></figure>
<p>Для исправления ситуации достаточно внести уточнение: </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="664" height="93" src="https://otus.ru/journal/wp-content/uploads/2021/08/2-6.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1893" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/2-6.jpg 664w, https://otus.ru/journal/wp-content/uploads/2021/08/2-6-300x42.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/2-6-150x21.jpg 150w" sizes="(max-width: 664px) 100vw, 664px" /></figure>
<p>2.«Алмаз смерти» или «Алмаз обреченности». Так называют ситуацию, при которой у классового элемента 2 родителя, каждый из которых уже наследовал свойства одного и того же «прародителя»: </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="662" height="195" src="https://otus.ru/journal/wp-content/uploads/2021/08/1-30.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1894" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/1-30.jpg 662w, https://otus.ru/journal/wp-content/uploads/2021/08/1-30-300x88.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/1-30-150x44.jpg 150w" sizes="(max-width: 662px) 100vw, 662px" /></figure>
<p>Во втором случае сканеры и принтеры служат устройствами. Питаются от розетки и получают свойства «Powered…». Но ксерокс объединяет эти два девайса. Поддержка такого кода способна привести не только в медленной работе утилиты, но и к непредвиденным поворотам.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92_C"></span>В C#<span class="ez-toc-section-end"></span></h3>
<p>Также стоит выяснить, что такое упомянутое ранее множественное наследование, но уже в Си Шарп. Работать, как и в прошлых случаях, будем с public, несмотря на то, что обычно переменные и другие составляющие бывают private.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%B1_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B0%D1%85"></span>Об интерфейсах<span class="ez-toc-section-end"></span></h4>
<p>Но сначала обратим внимание на немаловажный момент – интерфейсы. Это инструмент реализации полиморфизма. Некий набор методов, обеспечиваемый классовыми составляющими, воплощающими в жизнь этот самый интерфейс.</p>
<p>Содержит сигнатуры. Не может включать в себя:</p>
<ul><li>конструкторы;</li><li>константы;</li><li>поля;</li><li>статистические составляющие.</li></ul>
<p>Объявляется и используется по следующему примеру:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="541" height="113" src="https://otus.ru/journal/wp-content/uploads/2021/08/1-31.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1895" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/1-31.jpg 541w, https://otus.ru/journal/wp-content/uploads/2021/08/1-31-300x63.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/1-31-150x31.jpg 150w" sizes="(max-width: 541px) 100vw, 541px" /></figure>
<p>Вот ситуация, при которой класс должен реализовывать интерфейс посредством предоставления реализации всех членов последнего:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="544" height="335" src="https://otus.ru/journal/wp-content/uploads/2021/08/2-7.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1896" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/2-7.jpg 544w, https://otus.ru/journal/wp-content/uploads/2021/08/2-7-300x185.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/08/2-7-150x92.jpg 150w" sizes="(max-width: 544px) 100vw, 544px" /></figure>
<p>Интерфейсы необходимы для множественного «заимствования».</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BD%D0%B5%D0%BF%D0%BE%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC_%C2%AB%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D1%8F%D1%82%D0%B8%D0%B8%C2%BB"></span>О непосредственном «перенятии»<span class="ez-toc-section-end"></span></h4>
<p>Множественное наследование в C – это процесс перенятия классовой составляющей сразу от двух родителей. В Шарпе данный вариант используется редко, так как ему на смену пришли интерфейсы. Здесь классовая составляющая способна реализовывать сразу несколько interfaces. Несмотря на это, «идентификатор» public в Sharp применяется, и весьма часто.</p>
<p>При реализации нескольких интерфейсов используется разделительный символ «запятая». Кодификация окажется следующей:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="432" height="547" src="https://otus.ru/journal/wp-content/uploads/2021/08/3-6.jpg" alt="Все о наследовании в Си-семействе" class="wp-image-1897" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/3-6.jpg 432w, https://otus.ru/journal/wp-content/uploads/2021/08/3-6-237x300.jpg 237w, https://otus.ru/journal/wp-content/uploads/2021/08/3-6-118x150.jpg 118w" sizes="(max-width: 432px) 100vw, 432px" /></figure>
<p>Тут:</p>
<ol type="1"><li>Интерфейсом объявлен некий IDrawable. Это – метод рисования некоторого числа объектов.</li><li>Может реализовывать Image.</li><li>Circle и Image – разные сущности без базового class. Для устранения неполадок создается указатель на «главный» public интерфейс.</li></ol>
<p>Так, в Шарпе для «перенятия» множественного типа задействованы или abstract classes, или интерфейсы.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/csharp-professional/?utm_source=oj&utm_medium=affilate&utm_campaign=csharp" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-3.png" alt="Все о наследовании в Си-семействе" class="wp-image-1898" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-3.png 970w, https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-3-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-3-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-3-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/cpp-professional/?utm_source=oj&utm_medium=affilate&utm_campaign=cplus" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-4.png" alt="Все о наследовании в Си-семействе" class="wp-image-1899" srcset="https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-4.png 970w, https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-4-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-4-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2021/08/C_970x90-4-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p>Также вам может быть интересен <a href="https://otus.ru/lessons/dev_c/?utm_source=oj&utm_medium=affilate&utm_campaign=c" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">курс «Программист C»<span class="wpel-icon wpel-image wpel-icon-6"></span></a> в Otus.</p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/c-3/" rel="tag" data-wpel-link="internal">C</a><a href="https://otus.ru/journal/tag/c/" rel="tag" data-wpel-link="internal">c++</a><a href="https://otus.ru/journal/tag/si/" rel="tag" data-wpel-link="internal">Си</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-nasledovanii-v-si-semejstve%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-nasledovanii-v-si-semejstve%2F&text=%D0%92%D1%81%D0%B5%20%D0%BE%20%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8%20%D0%B2%20%D0%A1%D0%B8-%D1%81%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B5" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-nasledovanii-v-si-semejstve%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-nasledovanii-v-si-semejstve%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2021%2F08%2Foj-1080x720-9-1.png&description=%D0%92%D1%81%D0%B5%20%D0%BE%20%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8%20%D0%B2%20%D0%A1%D0%B8-%D1%81%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B5" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/kompjuternye-nauki-opisanie-osobennosti-izuchenie/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/kompjuternye-nauki-opisanie-osobennosti-izuchenie/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Компьютерные науки: описание, особенности, изучение" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-8-1-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Компьютерные науки: описание, особенности, изучение" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/kompjuternye-nauki-opisanie-osobennosti-izuchenie/" data-wpel-link="internal">Компьютерные науки: описание, особенности, изучение</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/kompjuternye-nauki-opisanie-osobennosti-izuchenie/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-08-25T18:37:54+00:00">25 августа, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/c-i-c-znakomstvo-s-operatornoj-peregruzkoj/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/c-i-c-znakomstvo-s-operatornoj-peregruzkoj/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="C++ и C#: знакомство с операторной перегрузкой" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/08/oj-1080x720-10-1-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="C++ и C#: знакомство с операторной перегрузкой" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/c-i-c-znakomstvo-s-operatornoj-peregruzkoj/" data-wpel-link="internal">C++ и C#: знакомство с операторной перегрузкой</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/c-i-c-znakomstvo-s-operatornoj-peregruzkoj/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-08-25T19:14:01+00:00">25 августа, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">9 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/vse-o-nasledovanii-v-si-semejstve\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 15:11:43 GMT -->