clases derivadas: herencia. la herencia o relacion es-un es la relacion que existe entre dos...
Post on 02-Apr-2015
121 Views
Preview:
TRANSCRIPT
CLASES DERIVADAS:
HERENCIA
La herencia o relacion es-un es la relacion que existe entre dos clases, en la que una clase denominada se crea a partir de otras ya existente, denominada clase base.
La declaracion de la derivacion de clases debe incluir el nombre de la clase base de la que se deriva y especificador de acceso que indica el tipo de herencia(Publica, Privada y Protegida).
class nombre_clase : tipo_herencia nombre_clase_base
class Triangulo : public Figura {
public: //seccion publica
……..private:
//seccion privada……
};
Considerese una clase Prestamo y tres clases derivadas de ella: Pago_fijo, Pago_variable e Hipoteca.
class Prestamo { protected:
› float capital;› float tasa_interes;
public:Prestamo( float, float);virtual int CrearTablaPagos(float[MAX_TERM][NUM_COLUMNAS])=C;
};
Class Hipoteca : public Prestamo {private:int num_recibos;int recibos_por_anyo;float pago;
public:Hipoteca(int, int, float, float, float);int CrearTablaPagos(float [MAX_TERN][NUM_COLUMNAS]);
};
Herencia publica: es aquella en que el especificador de acceso es public(publico).
Herencia privada: es aquella en que el especificador de acceso es private(privado).
Herencia protegida: es aquella en que el especificador de acceso es protected(protegido).
#include “fstring.h”class Publicacion {
public:void NombrarEditor(const char *s);void PonerFecha(unsigned long fe);
private: string editor;unsigned long fecha;
};class Revista : public Publicacion {public:
void NumerosPorAnyo(unsigned n);void FijarCirculacion(unsigned long n);
private: unsigned numerosPorAnyo;unsigned long circulacion;
};
class Libro : public Publicacion {public:
void PonerISBN(const char *s);void PonerAutor(const char *s);
private:Dstring ISBN;Dstring autor;
};
Tipo de herencia
Tipo de elemento
¿Accesible a clase derivada?
Public publicprotectedprivate
SiSiNo
Private publicprotectedprivate
SiSiNo
Significa que una clase derivada tiene acceso a los elementos públicos y protegidos de su clase base.
Significa que un usuario de la clase derivada no tiene acceso a ninguno de sus elementos de la clase base. El formato es:
class ClaseDerivada : private ClaseBase {public: //Sección publica
Protected://Sección privada
Private://sección privada
};
Los miembros públicos y protegidos de la clase base se convierten en miembros protegidos de la clase derivada y los miembros privados de la clase se vuelven inaccesibles.
Tipos de herencia
Acceso a miembro base
Acceso a miembro a clase derivada
public publicprotectedprivate
publicprotectedinaccesible
private publicprotectedprivate
protectedprotectedinaccesible
private publicprotectedprivate
privateprivateinaccesible
class Base{public:
int i1;Protected:
int i2;Private:
int i3;};class D1 : private Base{
void f();};class D2 : protected Base{
void g();};Class D3 : public Base{
void h();};
Void D1::f(){i1=0;//Correctoi2=0;//Correctoi3=0;//Error
};Base b;b.i1=0;//correctob.i2=0;//Errorb.i3=0;//ErrorD1 d1;d1.i1=0;//Errord1.i2=0;//Errord1.i3=0;//ErrorD2 d2;d2.i1=0;//Errord2.i2=0;//Errord2.i3=0;//ErrorD3 d3;d3.i1=0;//Correctod3.i2=0;//Errord3.i3=0;//Error
class D4 : protected base{public:
base::i1;};
D4 d4;d4.i1=0;//correcto
class B1{public:
B1(){cout <<“C-B1”<<endl;}};class B2{public:
B2(){cout <<“C-B1<<endl;}};class D : public B1, B2{public:
D(){cout <<“C-D”<<endl;}};D d1;
SintaxisClaseD::ClaseD(Parametros) : ClaseB(Parametros), ListaMbrD{//Cuerpo del constructo};
Class Punto{public:
Punto(int xv, int yv);//…};class Punto3D : public Punto{public:
Punto3D(int xv, int yv, int zv);void fijarz();
private:int z;
};Punto3D::Punto3D(int xv, int yv, int zv) : Punto(xv, yv){
fijarz(zv);};
class C1{public:
C1(int n);~C1();
private:int *pi, l;
};C1::C1(int n) : l(n){
cout <<l<<“ enteros se asignan”<<endl;}C1::~C1(){
cout<<l<<“ enteros son liberados”<<endl;delete []pi;
}Class C2 : public C1{public:
C2(int n);~C2();
private:char *pc;int l;
};C2::C2(int n) :C1(n), l(n){
cout <<l<<“caracteres designados”<<endl;pc=new char[1];
}C2::~C2(){
cout <<l<<“caracteres son liberados”<<endl;delete []pc;
}
void main(){C2 a(50), b(100);}
top related