Наследование является одним из основных понятий объектно-ориентированного программирования и позволяет создавать новые классы на основе уже существующих. В C++ наследование реализуется при помощи ключевого слова "class", за которым следует имя класса-предка, а затем ключевое слово "public" или "private" и имя нового класса.
Класс-предок (или базовый класс) определяет общие свойства и методы для нового класса, который является производным классом (или дочерним классом). Новый класс наследует все свойства и методы базового класса и может добавлять свои собственные свойства и методы.
Наследование в C++ может быть реализовано с использованием трех различных типов наследования:
- Public Inheritance (публичное наследование) - все публичные свойства и методы базового класса становятся публичными свойствами и методами производного класса. Защищенные и приватные свойства и методы базового класса не доступны в производном классе.
- Protected Inheritance (защищенное наследование) - все публичные и защищенные свойства и методы базового класса становятся защищенными свойствами и методами производного класса. Приватные свойства и методы базового класса не доступны в производном классе.
- Private Inheritance (приватное наследование) - все публичные и защищенные свойства и методы базового класса становятся приватными свойствами и методами производного класса. Приватные свойства и методы базового класса не доступны в производном классе.
Для реализации наследования в C++ используются следующие операторы:
- Ключевое слово "class", за которым следует имя базового класса.
- Оператор ":" (двоеточие), который указывает на наследование.
- Ключевые слова "public", "protected" или "private", которые определяют вид наследования.
Пример наследования в C++:
В этом примере класс "Rectangle" является производным классом от класса "Shape". Класс "Rectangle" наследует свойства "width" и "height" от класса "Shape" и добавляет метод "area()", который возвращает площадь прямоугольника.
Обратите внимание, что свойства "width" и "height" объявлены в базовом классе "Shape" как защищенные (protected), поэтому они не могут быть доступны напрямую из объекта производного класса "Rectangle". Однако метод "area()" может использовать эти свойства, так как он вызывается в контексте производного класса.