Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Множественное, многоуровневое и иерархическое наследование C++

Множественное, многоуровневое и иерархическое наследование в C++

В этом руководстве мы узнаем о различных моделях наследования в программировании на C++:множественное, многоуровневое и иерархическое наследование с примерами.

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

В программировании на C++ существуют различные модели наследования.

<час>

Многоуровневое наследование C++

В программировании на C++ вы можете не только получить класс от базового класса, но вы также можете получить класс от производного класса. Эта форма наследования известна как многоуровневое наследование.

class A { 
... .. ... 
};
class B: public A {
... .. ...
};
class C: public B {
... ... ...
};

Здесь класс B является производным от базового класса A и класс C происходит от производного класса B .

<час>

Пример 1. Многоуровневое наследование C++

#include <iostream>
using namespace std;

class A {
    public:
      void display() {
          cout<<"Base class content.";
      }
};

class B : public A {};

class C : public B {};

int main() {
    C obj;
    obj.display();
    return 0;
}

Вывод

Base class content.

В этой программе класс C происходит от класса B (который является производным от базового класса A ).

объект объект класса C определяется в main() функция.

Когда display() вызывается функция, display() в классе A выполняется. Это потому, что нет display() функция в классе C и класс B .

Компилятор сначала ищет display() функция в классе C . Поскольку функции там нет, она ищет функцию в классе B (как C происходит от B ).

Функция также не существует в классе B , поэтому компилятор ищет его в классе A (как B происходит от A ).

Если display() функция существует в C , компилятор переопределяет display() класса A (из-за переопределения функции-члена).

<час>

Множественное наследование C++

В программировании на C++ класс может быть производным от более чем одного родителя. Например, класс A Bat происходит от базовых классов Mammal и Крылатое животное . Это имеет смысл, потому что летучая мышь — это не только крылатое животное, но и млекопитающее.

<рисунок> <час>

Пример 2. Множественное наследование в программировании на C++

#include <iostream>
using namespace std;

class Mammal {
  public:
    Mammal() {
      cout << "Mammals can give direct birth." << endl;
    }
};

class WingedAnimal {
  public:
    WingedAnimal() {
      cout << "Winged animal can flap." << endl;
    }
};

class Bat: public Mammal, public WingedAnimal {};

int main() {
    Bat b1;
    return 0;
}

Вывод

Mammals can give direct birth.
Winged animal can flap.
<час>

Неоднозначность множественного наследования

Наиболее очевидная проблема с множественным наследованием возникает во время переопределения функции.

Предположим, два базовых класса имеют одну и ту же функцию, которая не переопределяется в производном классе.

Если вы попытаетесь вызвать функцию, используя объект производного класса, компилятор выдаст ошибку. Это потому, что компилятор не знает, какую функцию вызывать. Например,

class base1 {
  public:
      void someFunction( ) {....}  
};
class base2 {
    void someFunction( ) {....} 
};
class derived : public base1, public base2 {};

int main() {
    derived obj;
    obj.someFunction() // Error!  
}

Эту проблему можно решить, используя функцию разрешения области видимости, чтобы указать, какую функцию классифицировать:base1 или base2.

int main() {
    obj.base1::someFunction( );  // Function of base1 class is called
    obj.base2::someFunction();   // Function of base2 class is called.
}
<час>

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

Если от базового класса наследуется более одного класса, это называется иерархическим наследованием. При иерархическом наследовании все функции, общие для дочерних классов, включаются в базовый класс.

Например, физика, химия, биология являются производными от класса естественных наук. Точно так же Dog, Cat, Horse являются производными от класса Animal.

<час>

Синтаксис иерархического наследования

class base_class {
     ... .. ...
}

class first_derived_class: public base_class {
     ... .. ...
}

class second_derived_class: public base_class {
     ... .. ...
}

class third_derived_class: public base_class {
     ... .. ...
}
<час>

Пример 3. Иерархическое наследование в программировании на C++

// C++ program to demonstrate hierarchical inheritance

#include <iostream>
using namespace std;

// base class
class Animal {
   public:
    void info() {
        cout << "I am an animal." << endl;
    }
};

// derived class 1
class Dog : public Animal {
   public:
    void bark() {
        cout << "I am a Dog. Woof woof." << endl;
    }
};

// derived class 2
class Cat : public Animal {
   public:
    void meow() {
        cout << "I am a Cat. Meow." << endl;
    }
};

int main() {
    // Create object of Dog class
    Dog dog1;
    cout << "Dog Class:" << endl;
    dog1.info();  // Parent Class function
    dog1.bark();

    // Create object of Cat class
    Cat cat1;
    cout << "\nCat Class:" << endl;
    cat1.info();  // Parent Class function
    cat1.meow();

    return 0;
}

Вывод

Dog Class:
I am an animal.
I am a Dog. Woof woof.

Cat Class:
I am an animal.
I am a Cat. Meow.

Здесь как Dog и Cat классы являются производными от Animal учебный класс. Таким образом, оба производных класса могут получить доступ к info() функция, принадлежащая Animal класс.


Язык C

  1. Класс и объект С#
  2. Абстрактный класс и метод С#
  3. Частичный класс C# и частичный метод
  4. Запечатанный класс и метод С#
  5. Классы и объекты С++
  6. Публичное, защищенное и частное наследование C++
  7. Дружественные функции C++ и дружественные классы
  8. Разница между структурой и классом:объяснение на примере C++
  9. Классы хранения в C++
  10. Дата и время С++