1 CLASES DERIVADAS: HERENCIA
2 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).
3 class nombre_clase : tipo_herencia nombre_clase_base class Triangulo : public Figura { public: //seccion publica …….. private: //seccion privada …… };
4 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]); };
5 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).
6 #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; };
7 Tipo de herenciaTipo de elemento¿Accesible a clase derivada? Publicpublic protected private Si No Privatepublic protected private Si No
8 Significa que una clase derivada tiene acceso a los elementos públicos y protegidos de su clase base.
9 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 };
10 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.
11 Tipos de herencia Acceso a miembro base Acceso a miembro a clase derivada public protected private public protected inaccesible privatepublic protected private protected inaccesible privatepublic protected private inaccesible
12 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
13 class D4 : protected base{ public: base::i1; }; D4 d4; d4.i1=0;//correcto
14 class B1{ public: B1(){cout
15 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); };
16 class C1{ public: C1(int n); ~C1(); private: int *pi, l; }; C1::C1(int n) : l(n){ cout