160 likes | 312 Views
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.
E N D
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; };
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.
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;//Correcto i2=0;//Correcto i3=0;//Error }; Base b; b.i1=0;//correcto b.i2=0;//Error b.i3=0;//Error D1 d1; d1.i1=0;//Error d1.i2=0;//Error d1.i3=0;//Error D2 d2; d2.i1=0;//Error d2.i2=0;//Error d2.i3=0;//Error D3 d3; d3.i1=0;//Correcto d3.i2=0;//Error d3.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; Sintaxis ClaseD::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); }