Recomendado, 2024

La Elección Del Editor

Diferencia entre herencia única y múltiple

La herencia apoya firmemente el concepto de reutilización, es decir, la clase recién creada reutiliza las propiedades de las ya existentes. El especificador de acceso decide la forma en que la clase derivada heredará el miembro de la clase base. Hay muchas formas de lograr una herencia única, múltiple, jerárquica, multinivel, híbrida. Mientras que nuestro principal tema de discusión es la diferencia entre herencia simple y múltiple. En herencia única, solo tenemos una clase base que es heredada por una sola clase derivada. En herencia múltiple, tenemos más de dos clases base que se heredan de forma combinada por una sola clase derivada.


Gráfica comparativa

Bases para la comparaciónHerencia únicaHerencia múltiple
BASICLa clase derivada hereda una sola clase base.La clase derivada hereda dos o más de dos clases base.
ImplementaciónClase de clase derivada: clase base de access_specifierClase derivada _class: access_specifier base_class1, access_specifier base_class2, ....
Acceso
Clase derivada accede a las características de una sola clase base.Clase derivada accede a las características combinadas de las clases base heredadas
VisibilidadPúblico, Privado, ProtegidoPúblico, Privado, Protegido
Tiempo de ejecuciónRequiere poco tiempo de ejecución sobre la cabezaRequiere una sobrecarga de tiempo de ejecución adicional en comparación con la herencia única

Definición de herencia única

En la herencia individual, hay una sola clase base y una única clase derivada. La clase derivada hereda la clase base de forma pública, protegida y privada. La clase derivada puede acceder a los miembros de la clase base de acuerdo con el especificador de acceso especificado durante la herencia de la clase base.

Tengamos un ejemplo de la vida real. Tenemos dos clases, una "clase de cuenta" y una "clase de cuenta de ahorro". Aquí, "guardar clase de cuenta" puede heredar la característica de "clase de cuenta", por lo que "clase de cuenta" se convertirá en clase base / super / padre para guardar clase de cuenta, y "clase de cuenta de ahorro" será una clase derivada.

Aquí los atributos de "clase de cuenta" son acc_no (privado) y balance (público), y las funciones de los miembros son initialize (), get_accno () que son públicas. Ahora, la "clase de cuenta" se hereda públicamente en "guardar la clase de cuenta", por lo que se puede acceder directamente a todos los miembros públicos de "clase de cuenta" mediante la "clase de cuenta de ahorro". Puede acceder al miembro privado de "clase de cuenta" a través de las funciones de miembro público de "clase de cuenta" pero no puede acceder a ellos directamente.

Implementación de herencia única:

 # incluir usando el espacio de nombres estándar; clase Cuenta {int acc_no, ; público: balance flotante; void initialize (int x, int y) {acc_no = x; balance = y; } int get_accno. () {return acc_no; }}; clase Saving_acc: cuenta pública {float intrest_rate; public: // constructor de la clase Saving_acc Saving_acc (int c) {interest_rate = c; } void display () {cout < 

Definición de herencia múltiple

La herencia múltiple permite que la clase derivada herede características combinadas de más de una clase base, es decir, tenemos una clase derivada única y varias clases base. Cada clase base debe heredarse mencionando el especificador de acceso separado para cada una de ellas. Una clase derivada puede acceder a los miembros de las clases base en función del especificador de acceso por el que se hereda la clase base.

Hagámoslo más fácil con el ejemplo, tenemos tres clases, es decir, bicicleta, automóvil y vehículo. Ahora, "Vehículo" puede heredar las características de "Bicicleta" así como "Coche". Entonces, "Vehículo" se convierte en clase derivada y "Bicicleta" y "Coche" se convierten en la clase base. Ahora, “Bike” y “Car” son heredados públicamente por “Vehicle”, puede acceder a todos los miembros públicos de “Bike” y “Car”, pero como tenemos una entidad Model_no protegida en “Car”, es privado para Car pero puede ser Se accede por "Vehículo".

Implementación de herencia múltiple:

 # incluir usando namespace std; clase Bike {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; clase Car {protected: int Model_no; público: void set_Model_no (int p) {Model_no = p; }}; clase Vehical: public Bike, public car {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "no de ruedas" < 

Diferencias clave entre herencia única y múltiple

  1. La herencia única es una clase derivada que tiene una clase base única mientras que, en herencia múltiple, tiene dos o más de dos clases base, pero una clase derivada única.
  2. La herencia múltiple es bastante confusa ya que aquí una sola clase derivada hereda dos o más clases base. Si las clases base tienen un atributo o función con el mismo nombre para la clase derivada, se vuelve difícil identificar qué atributo o función de la clase base tiene que derivar.
  3. Los problemas generales son menores en caso de herencia única. Pero en caso de herencia múltiple, la construcción o destrucción del objeto invoca a los constructores y destructores de la clase padre en la jerarquía de clases, lo que aumenta la sobrecarga.
  4. La herencia única es más hacia la especialización. Mientras que la herencia múltiple es más hacia la generalización.
  5. Como la herencia única tiene menos sobrecarga, tiene menos tiempo de ejecución en comparación con la herencia múltiple.

Conclusión

La herencia facilita el trabajo del programador, ya que si una clase ya está formada, sus características pueden ser adaptadas por otra si es necesario. Aunque el especificador de acceso limita el acceso a los miembros de una clase base de una manera determinada, hace que los datos sean más seguros. La herencia única es de alguna manera más simple y fácil de implementar que la herencia múltiple. La herencia reduce el tamaño del código de objeto, pero también afecta el tiempo de ejecución del programa.

Top