РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
697 of 815 menu

Наследование

Наследование - это механизм объектно-ориентированного программирования, при котором один класс (наследник) перенимает поля и методы другого класса (базового). Базовый класс также называют родительским или суперклассом, а класс-наследник - производным или подклассом. При наследовании указывается спецификатор доступа: public, protected или private, который определяет, как наследуемые члены будут доступны в производном классе.

Синтаксис

class Base { // члены базового класса }; class Derived : access Base { // члены производного класса };

Пример

Давайте создадим базовый класс Animal с методом speak и производный класс Dog, который наследует этот метод и добавляет собственный метод fetch:

#include <iostream> using namespace std; class Animal { public: void speak() { cout << "Some sound" << endl; } }; class Dog : public Animal { public: void fetch() { cout << "Fetching" << endl; } }; int main() { Dog dog; dog.speak(); dog.fetch(); return 0; }

Результат выполнения кода:

"Some sound" "Fetching"

Пример

Давайте рассмотрим, как работают спецификаторы доступа при наследовании. При public-наследовании публичные члены базового класса остаются публичными, а при protected-наследовании становятся защищёнными:

#include <iostream> using namespace std; class Base { public: int pub = 1; protected: int prot = 2; }; class PublicDerived : public Base { public: int getProt() { return prot; } }; class ProtectedDerived : protected Base { public: int getPub() { return pub; } int getProt() { return prot; } }; int main() { PublicDerived pd; cout << pd.pub << endl; cout << pd.getProt() << endl; ProtectedDerived prd; cout << prd.getPub() << endl; cout << prd.getProt() << endl; return 0; }

Результат выполнения кода:

1 2 1 2

Пример

Давайте создадим цепочку наследования: класс A - базовый, класс B наследует A, а класс C наследует B. Такой класс C получит доступ ко всем публичным членам как B, так и A:

#include <iostream> using namespace std; class A { public: void methodA() { cout << "A" << endl; } }; class B : public A { public: void methodB() { cout << "B" << endl; } }; class C : public B { public: void methodC() { cout << "C" << endl; } }; int main() { C obj; obj.methodA(); obj.methodB(); obj.methodC(); return 0; }

Результат выполнения кода:

"A" "B" "C"

Смотрите также

  • ключевое слово virtual,
    которое позволяет переопределять методы в наследниках
  • ключевое слово override,
    которое проверяет переопределение виртуального метода
  • ключевое слово protected,
    которое задаёт защищённый доступ к членам класса
  • множественное наследование multiple-inheritance,
    которое позволяет наследовать от нескольких классов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить