Наследование — это особенность объектно-ориентированного программирования, в которой производный класс (дочерний класс) наследует свойство (член данных и функции-члены) базового класса (родительский класс). Например, ребенок наследует черты своих родителей.
При иерархическом наследовании свойство одного базового класса наследуется более чем одним подклассом. Существует один базовый класс и несколько производных классов. Несколько других классов также наследуют производные классы. Таким образом, иерархические структуры образуют древовидную структуру. Это похоже на то, что манго и яблоко являются фруктами; оба наследуют свойство плода. Фрукты будут базовым классом, а манго и яблоко — подклассами.
На приведенной ниже диаграмме показано, что класс A — это базовый класс, B — это подкласс, унаследованный от класса A, а C — это подкласс, который также наследуется от класса A.
Точно так же, если другой подкласс наследует свойство от класса B и так далее, тогда будет иерархия и сформирована древовидная структура, как показано ниже.
Здесь X и Y являются подклассом (дочерним классом), который наследует свойство от класса B, а M и N являются подклассом (дочерним классом), который наследует свойство от класса C. B является родительским классом X и Y, а C является родительским классом для M и N. access_specifier обеспечивает режим видимости в объявлении класса. Наследуя от базового класса, производный класс наследует члены базового класса.
Синтаксис:
Class A { ............ }; Class B: access_specifier A { ......... }; Class C: access_specifier A { ............. };
Пример 1:
С++
// C++ program for Hierarchical Inheritance
#include<iostream>
using
namespace
std;
class
A
//superclass A
{
public
:
void
show_A() {
cout<<
"class A"
<<endl;
}
};
class
B :
public
A
//subclass B
{
public
:
void
show_B() {
cout<<
"class B"
<<endl;
}
};
class
C :
public
A
//subclass C
{
public
:
void
show_C() {
cout<<
"class C"
<<endl;
}
};
int
main() {
B b;
// b is object of class B
cout<<
"calling from B: "
<<endl;
b.show_B();
b.show_A();
C c;
// c is object of class C
cout<<
"calling from C: "
<<endl;
c.show_C();
c.show_A();
return
0;
}
Выход
calling from B: class B class A calling from C: class C class A
Объяснение: В приведенной выше программе A является суперклассом, также известным как родительский класс, а B и C являются подклассами, также известными как дочерний класс. класс B и класс C наследуют свойства класса A.
Пример 2:
С++
// C++ program to illustrate the above concept
#include <iostream>
using
namespace
std;
// Base class
class
shape {
public
:
string name;
int
sides;
shape(string name,
int
sides)
// constructor
{
this
->name = name;
// this pointer
this
->sides = sides;
}
};
// Derived class
class
triangle :
public
shape
// mode is public
{
private
:
int
base;
int
height;
public
:
// shape constructor taking arguments
// from triangle constructor
triangle(string name,
int
sides,
int
base,
int
height) : shape(name, sides)
{
this
->base = base;
this
->height = height;
}
void
area()
{
cout <<
"area of triangle: "
<< (0.5 * base * height) << endl;
}
void
details()
{
cout <<
"shape is: "
<< name << endl;
cout <<
"no. of sides are: "
<< sides << endl;
cout <<
"base is: "
<< base << endl;
cout <<
"height is: "
<< height << endl;
area();
// calling area()
}
};
// Derived class
class
square :
public
shape {
private
:
int
height;
public
:
// shape constructor taking arguments
// from square constructor
square(string name,
int
sides,
int
height) : shape(name, sides)
{
this
->height = height;
}
void
area()
{
cout <<
"area of square: "
<< (height * height)
<< endl;
}
void
details()
{
cout <<
"shape is: "
<< name << endl;
cout <<
"no. of sides are: "
<< sides << endl;
cout <<
"height is: "
<< height << endl;
area();
// calling area()
}
};
int
main()
{
// Creating objects
triangle t(
"triangle"
, 3, 2, 3);
square s(
"square"
, 4, 2);
t.details();
cout << endl << endl;
s.details();
return
0;
}
Выход
shape is: triangle no. of sides are: 3 base is: 2 height is: 3 area of triangle: 3 shape is: square no. of sides are: 4 height is: 2 area of square: 4
Объяснение: В приведенном выше коде мы создали три класса: фигура, треугольник и квадрат. В этом примере класс формы является суперклассом. Треугольник и квадрат являются подклассами, которые наследуются от класса формы. Конструктор в каждом классе используется для инициализации элементов данных. Затем мы создали треугольные и квадратные объекты. И использовали details() для получения информации о треугольнике и квадрате. Здесь модификаторы доступа являются общедоступными.