English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Vector ( Vetor )++ Tutorial Básico

Vector ( Vetor )++ Controle de fluxo

Vector ( Vetor )++ Função

Vector ( Vetor )++ Array & string

Vector ( Vetor )++ Estrutura de dados

Vector ( Vetor )++ Classe & objeto

Vector ( Vetor )++ Ponteiro

Vector ( Vetor )++ Herança

Vector ( Vetor )++ Tutorial STL

Vector ( Vetor )++ Manual de referência

Vector ( Vetor )++ Herança múltipla, multi-nível e hierárquica

Neste artigo, você aprenderá sobre C ++Diferentes modelos de herança na programação: herança múltipla com exemplos, herança multi-nível e herança hierárquica.

HerançaÉ uma das funcionalidades principais da programação orientada a objetos. Permite que os desenvolvedores de software derivem uma nova classe a partir de uma classe existente. A classe derivada herda as funcionalidades da classe base (classe existente).

Vector ( Vetor ) ++Existem vários modelos de herança na programação.

Vector ( Vetor ) ++Herança multi-nível

在C ++Na programação, além de derivar uma classe de uma classe base, também é possível derivar uma classe de uma classe derivada. Esse tipo de herança é chamado de herança multi-nível.

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

Aqui, a classe B deriva da classe base A, e a classe C deriva da classe derivada B.

示例1:C ++Herança multi-nível

#include <iostream>
using namespace std;
class A
{
    public:
      void display()
      {
          cout << "Conteúdo da classe base.";
      ... .. ...
};
class B : public A
{
};
class C : public B
{
 
};
int main()
{
    C obj;
    obj.display();
    return 0;
... .. ...

输出结果

Conteúdo da classe base.

Neste programa, a classe C é derivada da classe B (a classe B é derivada da classe base A).

O objeto obj da classe C é definido na função main().

Quando a função display() é chamada, executa-se a função display() da classe A. Isso porque não há função display() nas classes C e B.

O compilador primeiro busca a função display() na classe C. Como essa função não existe na classe C, ele buscará a função na classe B (porque C herda de B).

这个display()函数在B类中也不存在,所以编译器在A类中寻找它(因为B是从A派生出来的)。

如果C中存在display()函数,则编译器将覆盖类A的display()(因为成员函数覆盖)。

Vector ( Vetor ) ++多重继承

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

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

#include <iostream>
using namespace std;
class Mammal {
  public:
    Mammal()
    {
      cout << "哺乳动物可以直接出生。" << endl;
    ... .. ...
};
class WingedAnimal {
  public:
    WingedAnimal()
    {
      cout << "有翼的动物能拍动翅膀。" << endl;
    ... .. ...
};
class Bat : public Mammal, public WingedAnimal {
};
int main()
{
    Bat b1;
    return 0;
... .. ...

输出结果

哺乳动物可以直接出生。
有翼的动物能拍动翅膀。

Voltar ao Topo

多重继承最明显的问题发生在函数重写期间。

假设两个基类具有相同的函数,但在派生类中未重写该函数。

如果尝试使用派生类的对象调用该函数,则编译器将显示错误。这是因为编译器不知道要调用哪个函数。例如,

class base1
{
  public:
     void someFunction( )
     { .... ... .... }  
};
class base2
{
    void someFunction( )
     { .... ... .... } 
};
class derived : public base1, public base2
{
    
};
int main()
{
    derived obj;
    obj.someFunction() // 错误!  
... .. ...

这个问题可以通过使用范围解析函数来指定哪个函数属于base1或base2类来解决

int main()
{
    obj.base1::someFunction( );  // 调用base1类的函数
    obj.base2::someFunction();   // 调用base2类的函数
... .. ...

Vector ( Vetor ) ++分层继承

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

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

分层继承的语法

class base_class {
     class third_derived_class: public base_class {
... .. ...
class first_derived_class: public base_class {
     class third_derived_class: public base_class {
... .. ...
class first_derived_class: public base_class {
     class third_derived_class: public base_class {
... .. ...
class second_derived_class: public base_class {
     class third_derived_class: public base_class {
... .. ...