La 'herencia' es una de las piedras angulares de la POO ya que ésta permite la creación de clasificaciones jerárquicas. Con la herencia, es posible crear una clase general que defina tratos comunes a una serie de elementos relacionados. Esta clase podría luego ser heredada por otras clases más específicas, cada una agregando solo aquellas cosas que son únicas para la clase 'heredera'.
En terminología estándar C++, una clase que es heredada es referida como la clase 'base'. La clase que efectúa la herencia es llamada la clase 'derivada'. Además, una clase derivada puede ser usada como una clase base por otra clase derivada. De esta manera, una jerarquía multicapa de clases puede ser lograda.
Evidentemente, la clase base y la clase derivada tienen código y datos comunes, de modo que si se crea la clase derivada de modo independiente, se duplicaría mucho de lo que ya se ha escrito para la clase base.
C++ soporta el mecanismo de derivación que permite crear clases derivadas, de modo que la nueva clase heredan todos los datos miembro que pertenecen a la clase ya existente.
La declaración de derivación de clases debe incluir el nombre de la clase base de la que se deriva y el especificador de acceso que indica el tipo de herencia (pública, privada y protegida). La primera línea de cada declaración debe incluir la sintaxis siguiente:
class <nombre de clase derivada> : <tipo de herencia> <nombre de clase base>
Ejemplo 1
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
class integracion
{
protected:
float a,b;
int n,op;
public:
integracion ()
{a=b=n=0;
}
float f(float n)
{
float x;
x= pow(n,2)+(6*n)-(3);
return x;
}
void introducir_limites()
{
cout<<"Introduzca el limite de integracion A:"<<endl;
cin>>a;
cout<<"Introduzca el limite de integracion B:"<<endl;
cin>>b;
cout<<"Introduzca el numero de segmentos:"<<endl;
cin>>n;
}
void leer()
{
cout<<"Introduzca el limite de integracion A:"<<endl;
cin>>a;
cout<<"Introduzca el limite de integracion B:"<<endl;
cin>>b;
}
};
class trapecio:public integracion
{
public:
trapecio():integracion()
{}
float m_trapecio()
{
float i,sum=0, cont=a;
float h=(b-a)/n;
for(int i=1;i<=n-1;i++)
{
cont+=h;
sum+=f(cont);
}
i=(b-a)*(f(a)+2*(sum)+f(b))/(2*n);
return i;
}
void imprime_integral()
{
cout<<"Aproximacion a la integral por trapecio multiple con n= "<<n<<" = "<<m_trapecio()<<endl;
}
};
class calcu3:public integracion
{
public:
calcu3():integracion()
{}
float integ3(int a, int b)
{
float y,y1,y2,y3,i,h,j;
h=(b-a);
h=h/3;
y=f(a);
j=a+h;
y1=f(j);
j+=h;
y2=f(j);
y3=f(b);
i=((h*3)/8)*((y+(3*y1)+(3*y2)+y3));
return i;
}
void imprime3()
{
cout<<"El valor de aproximacion mediante simpson 3/8 es :"<<integ3(a,b)<<endl;
}
};
class calcu1:public integracion
{
public:
calcu1(): integracion()
{}
float integ1(int a, int b)
{
float i;
i=(b-a)*((f(a)+(4*f((a+b)/2))+f(b))/4);
return i;
}
void imprime1()
{
cout<<"El valor de aproximacion mediante simpson 1/3 es "<<integ1(a,b)<<endl;
}
};
int main(int argc, char *argv[])
{
int op;
trapecio objtrap;
calcu1 objcalc1;
cout<<"Programa para resolver la ecuacion x^2+6x-3 por tres metodos, elija uno"<<endl;
cout<<"1 Metodo trapecio"<<endl;
cout<<"2 Simpson 1/3"<<endl;
cout<<"3 Simpson 3/8"<<endl;
cin>>op;
switch(op)
{
case 1:
objtrap.introducir_limites();
objtrap.imprime_integral();
break;
case 2:
objcalc1.leer();
objcalc1.imprime1();
break;
case 3:
calcu3 objcalc3;
objcalc3.leer();
objcalc3.imprime3();
break;
}
system("PAUSE");
return EXIT_SUCCESS;
}
No hay comentarios.:
Publicar un comentario