Documente Academic
Documente Profesional
Documente Cultură
Contenido
Tipos de herencia
Herencia y niveles de visibilidad
Herencia y creacin
Redefinicin de mtodos
Conversin de tipos
Consulta del tipo dinmico
Clases abstractas
Punteros a funcin
Iteradores
Herencia mltiple
Tema 3
Herencia
Caso de estudio
Deposito
titular
capital
plazoDias
tipoInteres
liquidar
getIntereses
Tema 3
DepositoEstructurado
tipoInteresVariable
capitalVariable
Redefine parte de la
funcionalidad heredada de
depsito
Clase Deposito
class Deposito {
private:
Persona* titular;
double capital;
int plazoDias;
double tipoInteres;
public:
Deposito();
double liquidar();
double getIntereses();
double getCapital();
int getPlazoDias();
double getTipoInteres();
Persona* getTitular();
};
Tema 3
Herencia
Herencia
Niveles de visibilidad
private
protected
public
Tema 3
Herencia
Herencia pblica
class B: public A {...}
Herencia
Herencia privada
Tema 3
Herencia
DepositoEstructurado::DepositoEstructurado(Persona titular,
double capital, int plazoDias, double tipoInteres, double
tipoInteresVariable, double capitalVariable):Deposito(titular,
capital, plazoDias, tipoInteres){
this.tipoInteresVariable = tipoInteresVariable;
this.capitalVariable = capitalVariable;
}
Tema 3
Herencia
Redefinicin de mtodos
NombreClase::nombreMtodo
Despotio::getCapital();
Tema 3
Herencia
10
Redefinicin de mtodos
class Deposito {
private:
Persona* titular;
double capital;
int plazoDias;
double tipoInteres;
public:
Deposito();
double liquidar();
virtual double getIntereses();
virtual double getCapital();
int getPlazoDias();
double getTipoInteres();
Persona* getTitular();
};
Tema 3
Herencia
11
Redefinicin de mtodos
//Override
double DepositoEstructurado::getIntereses() {
return Deposito::getIntereses() + getInteresesVariable();
}
//Override
double DepositoEstructurado::getCapital() {
return Deposito::getCapital() + getCapitalVariable();
}
Herencia
12
Ligadura dinmica:
Ligadura esttica:
Tema 3
Herencia
13
Asignaciones polimrficas
Deposito deposito();
DepositoEstructurado de();
//Asignacin polimrfica entre objetos valor
deposito = de;
//Ligadura esttica, Deposito::getCapital
cout<<"Capital total "<<deposito.getCapital()<<endl;
Deposito* ptrDeposito = new Deposito();
DepositoEstructurado* ptrDe = new DepositoEstructurado();
//Asignacin polimrfica de punteros
ptrDeposito = ptrDe;
//Ligadura dinmica, DepositoEstructurado::getCapital
cout<<"Capital total "<<ptrDeposito->getCapital()<<endl;
ptrDesposito->liquidar();
//Ligadura
esttica
Tema 3
Herencia
14
Sobrecarga en C++
class Deposito {
public:
virtual double getCapital();
};
class DepositoEstructurado: public Deposito{
public:
double getCapital(bool tipo);
};
Herencia
15
Sobrecarga en C++
class Deposito {
public:
virtual double getCapital();
};
class DepositoEstructurado: public Deposito{
public:
double getCapital();
double getCapital(bool tipo);
};
Tema 3
Herencia
16
Conversin de tipos
Operador dynamic_cast<Tipo*>(ptro)
Tambin dynamic_cast<Tipo>(ref)
Tema 3
Herencia
17
Conversin de tipos
Deposito** productos;
depositos = new Deposito*[MAX_DEPOSITOS];
DepositoEstructurado* depEst;
Herencia
18
int numDepositos = 0;
Herencia
19
Clases abstractas
ProductoFinanciero
titular
getImpuestos
getBeneficio
double getImpuestos() {
return getBeneficio() * 0.18;
}
Deposito
Cuenta
capital
plazoDias
tipoInteres
liquidar
getIntereses
saldo
ingreso
reintegro
Tema 3
getBeneficio es un
mtodo abstracto
ProductoFinanciero
debe ser una clase
abstracta
Herencia
20
Clases abstractas
Herencia
21
Interfaces
Herencia
22
Acciones
Punteros a funcin:
Tema 3
Herencia
23
X (*fptr) (A);
Tema 3
Herencia
24
Punteros a funcin
namespace banco{
class Sucursal{
private:
ProductoFinanciero** productos;
public:
Sucursal();
ProductoFinanciero* buscar(
bool (*condicion) (ProductoFinanciero*));
};
//Condiciones de bsqueda
bool depositoAlto (ProductoFinanciero* producto);
}
Tema 3
Herencia
25
Tema 3
Herencia
26
Condicin de bsqueda
Herencia
27
Herencia
28
Tema 3
Herencia
29
Herencia
30
Sucursal sucursal;
ProductoFinanciero* producto;
CondicionCapital* cc = new CondicionCapital(1000);
producto = sucursal.buscar(cc);
Tema 3
Herencia
31
Herencia mltiple
Tema 3
Herencia
32
Herencia repetida
class CuentaRemunerada: public Cuenta, public Deposito{
};
ProductoFinanciero
titular
Deposito
Cuenta
CuentaRemunerada
Tema 3
CuentaRemunerada
hereda dos veces de
ProductoFinanciero
Existe dos campos
titular en
CuentaRemunerada?
Conflicto de nombres con
el mtodo getBeneficio
Herencia
33
Herencia repetida
Herencia
34
Herencia repetida
Tema 3
Herencia
35
Asignaciones polimrficas
pf = (Cuenta*)cr;
Tema 3
Herencia
36
ProductoFinanciero* pf;
CuentaRemunerada* cr = new CuentaRemunerada();
pf = (Cuenta*)cr;
Herencia
37
Herencia virtual
Tema 3
Herencia
38
Herencia virtual
class ProductoFinanciero{
};
class Deposito: virtual public ProductoFinanciero {
};
class Cuenta:
};
};
Tema 3
Herencia
39
}
Tema 3
Herencia
40
double CuentaRemunerada::getBeneficio(){
return Deposito::getBeneficio();
}
Tema 3
Herencia
41
Asignaciones polimrficas
ProductoFinanciero* pf;
CuentaRemunerada* cr = new CuentaRemunerada();
pf = cr;
Herencia
42
Funcin dominante
Tema 3
Herencia
43
Tema 3
Herencia
44