C ++ --- herencia y derivación de clases

1. Derivación de la clase

1) Definición:
En la relación de herencia, la clase heredada se llama clase base (o clase principal) y la nueva clase definida a través de la relación de herencia se llama clase derivada (o subclase).
2) Características: una
clase derivada no solo puede heredar los miembros de la clase original, sino también agregar nuevos miembros;
3) La forma general de herencia: por
ejemplo, ya existe una clase.

class employee{
    
    
	//....
}

Necesita un desgarrador de clases para heredar esta clase;
luego:

class teacher:public employee{
    
    
	//.....
}

4) Las subclases pueden reescribir los métodos de miembro de la clase padre, requiriendo que el tipo de retorno de la función, el nombre de la función y la lista de parámetros sean consistentes;
código:

#include<stdio.h>
#include<iostream>
using namespace std;

class employee{
    
    //父类 
protected:
	char *name;
	int age;
	char sex;
public:
	//....
	void print(){
    
    //父类中的一个方法 
		cout<<"name:"<<name<<endl;
		cout<<"age:"<<age<<endl;
		cout<<"sex:"<<sex<<endl;
	}
};

class teacher:public employee//子类 继承父类,父类的成员自动被继承 
{
    
    
private:
	char *title;
	//...
public:
	//...		
	void print(){
    
    
		cout<<"name:"<<name<<endl;
		cout<<"age:"<<age<<endl;
		cout<<"sex:"<<sex<<endl;
		cout<<"title:"<<title<<endl;
	}
};

int main(){
    
    
	//... 
	
	
	return 0;
}

2. La relación entre la clase derivada y la clase base

La definición de clases derivadas:

class 派生类名:[继承方式] 基类名

El método de herencia de la clase C ++: herencia privada, protegida, pública;
diferentes métodos de herencia pueden hacer que la clase derivada tenga características diferentes al heredar los miembros de la clase base.
1.
Herencia privada:
los miembros públicos y protegidos de la clase principal se vuelven privados en la clase secundaria;
2.
Herencia pública:
los atributos de los miembros de la clase principal permanecen sin cambios en la clase secundaria;
3.
Herencia protegida:
miembros de la clase principal En la subclase, se vuelve protegida
4.
No importa qué herencia, los miembros privados de la clase padre no se pueden heredar. ! ! Refleja la idea de encapsulación de datos
5.
El método de herencia predeterminado de una clase definida por la palabra clave class es privado, y el método de herencia predeterminado de una clase definida por struct es público. Sea consistente con el método de acceso predeterminado en la clase. Grabarlo.
**
código:

#include<stdio.h>
#include<iostream>

using namespace std;


class Base{
    
    
	private:
		int a,b;
	public:
		int getA(){
    
    
			return a;
		}
};

class Derived:public Base{
    
    
	public:
		int getD(){
    
    //调用父类的public方法; 
			getA();
		}		
};

int main()
{
    
    
	
	//...	
	return 0;
}

3. El constructor y destructor de la clase derivada

**
1) El constructor de la clase derivada:
al crear el objeto de la clase derivada, debido a que el objeto de la clase derivada contiene los miembros de datos de la clase, el constructor de la clase derivada debe inicializar los miembros de datos de su propia definición , y también debe realizar la función de la clase base. Se inicializan los miembros de datos en. En otras palabras, el constructor de la clase derivada es responsable de llamar al constructor de la clase base.
2) La forma general del constructor de clases derivadas:

Nombre de la función del constructor de clase derivada (lista de parámetros): nombre de la función del constructor de la clase base (lista de parámetros) {...}

Utilice la lista de inicialización para inicializar los miembros de datos de la clase base.
código:

#include<iostream>

using namespace std;

class Base{
    
    
	int x,y;
public:
	Base(int a,int b){
    
    
		x=a;
		y=b;
		cout<<"construct Base"<<endl;
	}
	~Base(){
    
    
		cout<<"destruct Base"<<endl;
	}
};

class SonClass:public Base{
    
    
		
public:
	SonClass(int z):Base(z,z)
	{
    
    
		cout<<"construct SonClass"<<endl;	
	}	
	~SonClass(){
    
    
		cout<<"destruct SonClass"<<endl;
	}
};

int main()
{
    
    
	SonClass oo(8);
	return 0;
} 

resultado de la operación:

construct Base
construct SonClass
destruct SonClass
destruct Base

1. Pasos de ejecución del constructor de subclase: primero ejecute el constructor de la clase principal y luego ejecute su propio constructor;
2. Proceso de ejecución del destructor de subclase: primero ejecute su propio destructor y luego ejecute el destructor de la clase principal;

Esta idea es similar a la pila principio de primero en entrar, último en salir;
**

4. Herencia múltiple y clases base virtuales

**
1. Herencia única:
una clase derivada tiene solo una clase principal, esta forma es herencia única y su jerarquía de clases se puede expresar como un árbol.
2. Herencia múltiple:
C ++ permite que una subclase tenga múltiples clases padre, lo que se denomina herencia múltiple. Las clases base y las clases derivadas de herencia múltiple se pueden organizar en una estructura de gráfico dirigida.
(El método de declaración de las clases derivadas de herencia múltiple es similar al de la herencia única, excepto que es una lista en el momento de la declaración);

clase Clase derivada: <método derivado> clase base 1, <método derivado> clase base 2, ..., <método derivado> clase base n
{ // ... }

3. Clase base virtual:
copia miembro de una clase base que puede resolver herencia múltiple;
método de implementación:
clase Clase derivada: virtual <método derivado> Clase base ... { // ... } código:


#include<iostream>

using namespace std;

class A{
    
    
public:
	int x,y;
};

class B:virtual public A{
    
    
	int z;
};

class C:virtual public A{
    
    
	int a;
};

class D:public B,public C{
    
    
	
};
//D d;此时可以直接使用d.x,不再有二义性! 
int main()
{
    
    
	
	D d;
	cin>>d.x;
	cin>>d.y;
	cout<<"x="<<d.x<<endl;
	cout<<"y="<<d.y<<endl;
	return 0;
}

La herencia múltiple conducirá al problema de la herencia de diamantes (ambigüedad), ¡y el uso de clases base virtuales puede resolverlo!

Supongo que te gusta

Origin blog.csdn.net/timelessx_x/article/details/114990610
Recomendado
Clasificación