Найти в Дзене
Old Programmer

Объектно-ориентированное программирование. Наследование (С++). Статья 6

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А здесь все по объектно-ориентированному программированию.

Список разделов канала Old Programmer, канала о программировании и программистах
Old Programmer27 мая 2021

Мои последние статьи:

Программирование на Python. (программы в одну строку). Статья 3
Old Programmer5 августа 2020
Ассемблер на платформе x86-64, Linux, программирование. Статья 1 (регистры, syscall)
Old Programmer5 августа 2020
Объектно-ориентированное программирование. Конструкторы (С++). Статья 5
Old Programmer4 августа 2020
Из записок старого программиста. Завещание старых мастеров. Ассемблер (книга)
Old Programmer3 августа 2020
Программирование на языке программирования Python. Множества. Статья 2
Old Programmer3 августа 2020
Программирование. Некоторые "фишки" языка C
Old Programmer2 августа 2020
Объектно-ориентированное программирование. Простой пример на Python. Статья 4
Old Programmer1 августа 2020

Сегодня будем работать с такой важной темой, как наследование в языке 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.

Фрагмент программы 332.cpp
Фрагмент программы 332.cpp

Рекомендуем почитать
Документы, вакансии и контакты