Наследование — ключевое понятие объектно-ориентированного программирования (ООП). Оно позволяет создавать новые классы (наследники) на основе существующих (базовых или родительских классов), наследуя их функции, поля и переменные.
Наследование: механизм и модификаторы доступа
Наследование — механизм, при котором один класс (базовый класс) служит основой для создания других классов (классов-наследников). Классы-наследники получают доступ к публичным (public) и защищённым (protected) членам родительского класса. Члены класса с модификатором доступа private остаются доступными только внутри родительского класса.
Примеры наследования и модификаторов доступа
Рассмотрим классы First и Second.
class First {
protected:
int value;
};
class Second : public First {
public:
Second(int val) {
value = val;
std::cout << value << std::endl;
}
};
int main() {
Second object(23);
return 0;
}
Second наследует от First. Модификатор доступа protected у value в First обеспечивает доступ к ней в First и Second. Конструктор Second принимает значение, присваивает его унаследованной переменной value и выводит её на экран. Результат — вывод числа 23.
Наследование методов и использование конструкторов базового класса
Наследовать можно не только переменные, но и методы. Добавим метод setVal в First и вызовем его из Second.
class First {
protected:
int value;
public:
void setVal(int v) { value = v; }
First(int val) : value(val) {}
};
class Second : public First {
public:
Second(int val) : First(val) {
std::cout << value << std::endl;
}
};
class Third : public First {
public:
Third(int val) : First(val) {
std::cout << value << std::endl;
}
};
int main() {
Second object2(13);
Third object3(15);
return 0;
}
Конструктор Second вызывает setVal из First для присваивания value. Пример также демонстрирует множественное наследование от First (класс Third) и использование конструктора базового класса в конструкторах классов-наследников.
Наследование — мощный инструмент ООП, позволяющий создавать иерархию классов, избегая дублирования кода и улучшая структуру программы. Понимание принципов наследования упрощает разработку сложных программных систем.