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

Vector (vector)++ Tutoriales básicos

Vector (vector)++ Control de flujo

Vector (vector)++ Función

Vector (vector)++ Matriz & cadena

Vector (vector)++ Estructuras de datos

Vector (vector)++ Clase & objeto

Vector (vector)++ Punteros

Vector (vector)++ Herencia

Vector (vector)++ Tutorial STL

Vector (vector)++ Manual de referencia

Vector (vector)++ Herencia múltiple, multiplata y jerárquica

En este artículo, aprenderá sobre C ++Diferentes modelos de herencia en la programación: herencia múltiple con ejemplos, herencia multiplata y herencia jerárquica.

HerenciaEs una de las funciones nucleares de los lenguajes de programación orientados a objetos. Permite que los desarrolladores de software deriven una nueva clase de una clase existente. La clase derivada hereda las funciones de la clase base (clase existente).

Vector (vector) ++En la programación hay varios modelos de herencia.

Vector (vector) ++Herencia multiplata

在C ++En la programación, no solo se puede derivar una clase de una clase base, sino que también se puede derivar una clase de una clase derivada. Esta forma de herencia se llama herencia multiplata.

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

Aquí, la clase B se deriva de la clase base A, y la clase C se deriva de la clase derivada B.

示例1:C ++Herencia multiplata

#include <iostream>
using namespace std;
class A
{
    public:
      void display()
      {
          cout << "Contenido de la clase base.";
      ... .. ...
};
class B : public A
{
};
class C : public B
{
 
};
int main()
{
    C obj;
    obj.display();
    return 0;
... .. ...

输出结果

Contenido de la clase base.

En este programa, la clase C se deriva de la clase B (la clase B se deriva de la clase base A).

El objeto obj de la clase C se define en la función main().

Al llamar a la función display(), se ejecutará display() de la clase A. Esto se debe a que no existe la función display() en las clases C y B.

El compilador primero busca la función display() en la clase C. Dado que esta función no existe en la clase C, se buscará en la clase B (porque C se deriva de B).

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

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

Vector (vector) ++多重继承

在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;
... .. ...

输出结果

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

Volver al inicio

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

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

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

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 (vector) ++分层继承

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

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

分层继承的语法

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 {
... .. ...