English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este artículo, aprenderá sobre C ++todos los conocimientos sobre herencia. En términos más específicos, ¿qué es la herencia y diferentes métodos de implementación de la herencia mediante ejemplos.
la herencia en C ++uno de los principales aspectos de la programación orientada a objetos. Permite a los usuarios crear una nuevaclase(Clase derivada).
Las clases derivadas heredan todas las funciones de la clase base y pueden tener sus propias funciones adicionales.
supongamos que necesita tres personajes en el juego-unprofesor de matemáticas(Profesor de matemáticas),unfutbolista (Futbolista)y unComerciante(Comerciante).
Debido a que todos los roles son personas, pueden caminar y hablar. Pero, cada uno tiene habilidades especiales. El profesor de matemáticas puedeenseñar matemáticas, y el futbolista puedejugar al fútbol, el comerciante puedeGestionar un negocio.
Puede crear tres clases separadas que puedan caminar, hablar y ejecutar sus habilidades especiales, como se muestra en la siguiente imagen.
En cada clase, replicará el código de Walk (caminar) y Talk (hablar) para cada personaje.
Si se desea agregar nuevas funciones-comer (comer), entonces es necesario implementar el mismo código para cada personaje. Esto puede llevar a errores (al copiar) y código repetido.
Si poseemos unPersonclase, que tiene funciones básicas, como hablar, caminar, comer, dormir y agregar habilidades especiales a estas funciones según nuestro rol, es más fácilmás. Esto se realiza mediante la herencia.
Al usar la herencia, no es necesario implementar el mismo código para cada clase. Solamente necesitaHerenciaAsí es.
Por lo tanto, para el profesor de matemáticas (clase derivada), puede heredar todas las funciones de Person (clase base) y agregar nuevas funciones.TeachMaths(enseñar matemáticas)。Del mismo modo, para el futbolista, se heredan todas las funciones de Person y se agregan nuevas funcionesPlayFootball(jugar al fútbol)y otros.
Esto hace que tu código sea más conciso, fácil de entender y expandir.
Es importante recordar que:Al usar la herencia, cada clase derivada debe cumplir con las condiciones, independientemente de si es una clase base o no. En el ejemplo anterior, el maestro de matemáticas esuna persona, el futbolista esuna persona. No puedes tener:El comerciante es el negocio.
class Person { ... .. ... }; class MathsTeacher : public Person { ... .. ... }; class Footballer : public Person { .... .. ... };
En el ejemplo anterior, la clase Person es la clase base, mientras que las clases MathsTeacher y Footballer son derivadas de Person.
Las clases derivadas se presentan junto con la declaración de la clase, seguidas de dos puntos, el keyword public y el nombre de la clase base que deriva.
Dado que MathsTeacher y Footballer heredan de Person, pueden acceder a todos los datos y funciones miembros de Person.
Crear personajes de juego utilizando el concepto de herencia.
#include <iostream> using namespace std; class Person { public: string profession; int age; Person(): profession("desempleado"), age(16) { } void display() { cout << "Mi profesión es: " << profession << endl; cout << "Mi edad es: " << age << endl; walk(); talk(); } void walk() { cout << "Soy capaz de caminar." << endl; } void talk() { cout << "Soy capaz de hablar" << endl; } }; // La clase MathsTeacher hereda de la clase base Person. class MathsTeacher : public Person { public: void teachMaths() { cout << "Soy capaz de enseñar matemáticas." << endl; } }; // La clase Footballer hereda de la clase base Person. class Footballer : public Person { public: void playFootball() { cout << "Soy capaz de jugar al fútbol." << endl; } }; int main() { MathsTeacher teacher; teacher.profession = "maestro"; teacher.age = 23; teacher.display(); teacher.teachMaths(); Footballer footballer; footballer.profession = "atleta"; footballer.age = 19; footballer.display(); footballer.playFootball(); return 0; }
Resultados de salida
Mi profesión es: maestro Mi edad es: 23 Soy capaz de caminar. Soy capaz de hablar Soy capaz de enseñar matemáticas. Mi profesión es: atleta Mi edad es: 19 Soy capaz de caminar. Soy capaz de hablar Soy capaz de jugar al fútbol.
En este programa, Person es la clase base, y MathsTeacher y Footballer se derivan de la clase base Person.
La clase Person tiene dos miembros de datos- profession y age. También tiene dos funciones de miembros- walk() y talk().
Tanto MathsTeacher como Footballer pueden acceder a todos los miembros de datos y funciones de Person.
Pero, MathsTeacher y Footballer también tienen sus propios miembros de función: teachMaths() y playFootball(). Estas funciones solo pueden ser accedidas por su propia clase.
En la función main(), se creó un nuevo objeto MathsTeacher teacher.
Porque puede acceder a los miembros de datos de Person, por lo tanto, se puede establecer la profesión y la edad de teacher. Utilizar la función display() definida en la clase Person para mostrar estos datos. Del mismo modo, se definió la función teachMaths() en la clase MathsTeacher.
Del mismo modo, también se creará un nuevo objeto Footballer footballer. Puede acceder a los miembros de datos de Person y también puede llamar a la función display() para mostrar. Luego, solo el jugador de fútbol (footballer) puede acceder a la función playFootball().
Al crear una clase derivada desde una clase base, se pueden usar diferentes modificador de acceso para heredar los miembros de datos de la clase base.
Estos pueden ser public, protected o private.
En el ejemplo anterior, la clase base Person se heredó públicamente por MathsTeacher y football.
Conozca más sobreC ++de herencia pública, herencia protegida y herencia privadaMás información.
Supongamos que los miembros de la función de la clase base y la subclase tienen el mismo nombre y parámetros.
Si se crea un objeto de la subclase y se intenta acceder a la función miembro, solo se puede llamar a la función miembro de la subclase.
Los miembros de la función de la subclase derivada sobrescriben a los miembros de la función de la clase base.
Conozca más sobreC ++de la sobrescritura de funcionesMás información.