Иерархическое наследование C++

C++ Программирование и разработка

Наследование — это особенность объектно-ориентированного программирования, в которой производный класс (дочерний класс) наследует свойство (член данных и функции-члены) базового класса (родительский класс). Например, ребенок наследует черты своих родителей.

При иерархическом наследовании свойство одного базового класса наследуется более чем одним подклассом. Существует один базовый класс и несколько производных классов. Несколько других классов также наследуют производные классы. Таким образом, иерархические структуры образуют древовидную структуру. Это похоже на то, что манго и яблоко являются фруктами; оба наследуют свойство плода. Фрукты будут базовым классом, а манго и яблоко — подклассами.

На приведенной ниже диаграмме показано, что класс A — это базовый класс, B — это подкласс, унаследованный от класса A, а C — это подкласс, который также наследуется от класса A.

На приведенной ниже диаграмме показано, что класс A

Точно так же, если другой подкласс наследует свойство от класса B и так далее, тогда будет иерархия и сформирована древовидная структура, как показано ниже.

Здесь X и Y являются подклассом

Здесь 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() для получения информации о треугольнике и квадрате. Здесь модификаторы доступа являются общедоступными.

Читайте также:  Как использовать объекты Frozenset в Python?
Оцените статью
bestprogrammer.ru
Добавить комментарий