📜  C++多重,多层和阶层式继承

📅  最后修改于: 2020-09-25 05:00:59             🧑  作者: Mango

在本文中,您将学习C++编程中的不同继承模型:带有示例的多继承,多层次和分层继承。

继承是面向对象编程语言的核心功能之一。它允许软件开发人员从现有的类派生一个新的类。派生类继承基类(现有类)的功能。

C++编程中有多种继承模型。

C++多层次继承

在C++编程中,不仅可以从基类派生一个类,还可以从派生类派生一个类。这种继承形式称为多级继承。

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

在此,类别B从基础类别A派生,类别C从派生类别B派生。

示例1:C++多级继承

#include 
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派生(类B从基类A派生)。

C类的obj对象在main() 函数定义。

调用display() 函数 , A执行类A display() 。这是因为在类C和类B没有display() 函数 。

编译器首先在类C查找display() 函数 。由于该函数不存在,因此它将在类B查找该函数 (因为C是从B派生的)。

该函数在类B中也不存在,因此编译器在类A查找它(因为B是从A派生A )。

如果C存在display() 函数 ,则编译器将覆盖类A display() (由于重写了成员 函数 )。

C++多重继承

在C++编程中,一个类可以从多个父类派生。例如: Bat类是从MammalWingedAnimal基类WingedAnimal 。这很有意义,因为蝙蝠既是哺乳动物又是有翅膀的动物。

C++多重继承示例

示例2:C++编程中的多重继承

#include 
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 or base2

int main()
{
    obj.base1::someFunction( );  // Function of base1 class is called
    obj.base2::someFunction();   // Function of base2 class is called.
}

C++层次继承

如果从基类继承多个类,则称为层次继承。在分层继承中,子类中共有的所有功能都包括在基类中。

例如:物理,化学,生物学均来自科学课。

层次继承的语法

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

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

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

class third_derived_class: public base_class {
     ... .. ...
}