Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А здесь все по объектно-ориентированному программированию.
Мои последние статьи:
Сегодня будем работать с такой важной темой, как наследование в языке C++. В объектно-ориентрованном программировании (ООП) на C++ много всяких подводных камней. Все это можно изложить или в виде справочника, или путем программирования. Второе все таки предпочтительнее, ведь параллельно получаешь практику и набираешься опыта.
Конструкторы и деструкторы в наследовании C++
Если у нас есть некий класс скажем A (331.cpp) то можно образовать дочерний класс, просто написав class B:A или class B:public A. Во втором случае все члены класса A становятся доступны и классу B. Т.е. все свойства и методы класса A могут использоваться и в классе B, при этом в классе могут быть и свои методы и свойства. В этом и есть один из смыслов наследования: мы строим новый класс на основе уже существующего, добавляя туда новые качества. Например если у вас есть класс ЧЕЛОВЕК, то то на основе его можно создать класс ПАЦИЕНТ, который наделяется дополнительными характеристиками (кроме фио, адреса, номера паспорта и др.), имеющими непосредственное отношение к пациенту поликлиники. Далее от пациента можно сделать наследование, уточняющее типа пациента и т.д.
Сегодня я разбираю только один вопрос, связанный с наследованием, это конструкторы и деструкторы. Как они работают? В примере 331.cpp есть класс A и дочерний класс B. У каждого есть по одному конструктору и деструкторы. Что произойдет, если мы создадим объект. Других методов и свойств у классов нет. При запуске программы мы получим следующее:
Конструктор родителя
Конструктор потомка
Деструктор потомка
Деструктор родителя
Как видим конструкторы и деструкторы родительского класса запустились автоматически. Запомним также порядок в котором они запускаются.
Следующий пример несколько сложнее. У родительского класса два конструктора - без параметров, и с одним параметром. Конструкторы без параметров принято в ООП называть конструкторами по умолчанию. Кроме того, в родительском классе есть еще метод и свойство. Обратите внимание на строку B::B(int v):A(v). Это строка определяет, какой конструктор родительского класса будет запущен, если будет создаваться объект класса B. Если не указывать какой конструктор родительского класса будет запущен, то запускается конструктор по умолчанию.
Если мы запустим программу, то получим следующее:
Конструктор родителя 1
Конструктор потомка
27
Деструктор потомка
Деструктор родителя
Ну вот и все сегодня. Используйте ООП и получайте удовольствие от программирования. Подписывайтесь на мой канал Old Programmer.