Examen Tema 3 POO (Solucion)
Examen Tema 3 POO (Solucion)
Examen Tema 3 POO (Solucion)
ESCUELAUNIVERSITARIADEINFORMTICA
DPTO.LENGUAJES,PROYECTOSYSISTEMASINFORMTICOS
PROGRAMACINORIENTADAAOBJETOS
SOLUCINEXAMEN27deabrilde2011GRUPOGSM12
1. Indicar cmo se puede especializar una clase derivada respecto a su clase base en una
jerarquadeherencia.
Aadiendoatributosomtodosyredefiniendomtodosheredadosdelaclasebase.
2. Indicarlasdiferenciasmsconsiderablesentrelasrelacionesdecomposicin,asociaciny
dependenciafrentealarelacindeherencia.
3. Explicarquesunaclaseabstractaysidadaunaclaseabstractasepueden:
Construirobjetosdeesaclase
Declararpunterosaesaclase
Declararparmetrosporreferenciaaesaclase
Lasclasesabstractassonaquellasenlasquealmenosunmtodonoestimplementado.
Tienenalmenosunmtodovirtualpuro
Nosepuedenconstruirobjetosdelasclasesabstractas
Ssepuedendeclararpunterosaesaclase
Ssepuedendeclararparmetrosporreferenciaaesaclase
4. Explicarlasllamadasaconstructoresydestructoresdelaclasebasealconstruirydestruir
unobjetodesuclasederivada.
Cuandosecreaunobjetodeunaclasederivada,siempreseinvocaenprimerlugar
(implcitaoexplcitamente)aunconstructordelaclasebase.
Explcitamente:mediantelalistadeinicializacionesenlosconstructoresdelaclase
hija.(ej:Hija(inta,intb):Base(a,b),{};)
Implcitamente:Sinoseespecificauno,seejecutaelconstructorpordefectodela
clasebase.
Paraelcasodelosdestructores:cuandosedestruyeunobjetodeunaclasederivada,seinvoca
primeroaldestructordelaclasederivadayalfinalseinvocaaldestructordelaclasebase
UNIVERSIDADPOLITCNICADEMADRID
ESCUELAUNIVERSITARIADEINFORMTICA
DPTO.LENGUAJES,PROYECTOSYSISTEMASINFORMTICOS
PROGRAMACINORIENTADAAOBJETOS
SOLUCINEXAMEN27deabrilde2011GRUPOGSM12
5. ApartirdeladefinicinenC++delaclasecAsignaturadadaacontinuacin.
classcAsignatura{
private:
stringnombre;
stringtemario[10];
public:
cAsignatura();
cAsignatura(constcAsignatura&);
stringgetNombre();
stringgetTemariol();
voidoperator=(cAsignatura);
voidmostrar();//muestraenpantallaelvalordetodoslosatributosdelobjeto
};
FicherocAsignaturaOptativa.h
classcAsignaturaOptativa:publiccAsignatura{
private:
stringespecialidad;
stringsemestre;
public:
cAsignaturaOptativa();
cAsignaturaOptativa(constcAsignaturaOptativa&);
voidoperator=(cAsignaturaOptativa);
voidmostrar();
};
FicherocAsignaturaOptativa.pp
cAsignaturaOtativa::cAsignaturaOptativa():cAsignatura(){
especialidad=;
semestre=;
}
cAsignaturaOtativa::cAsignaturaOptativa(constcAsignaturaOptativa&Asig):cAsignatura(Asig){
especialidad=Asig.especialidad;
semestre=Asig.semestre;
}
voidcAsignaturaOptativa::operator=(cAsignaturaOptativaAsig){
cAsignatura::operator=(Asig);
especialidad=Asig.especialidad;
semestre=Asig.semestre;
}
voidcAsignaturaOptativa::mostrar(){;
cAsignatura::mostrar();
cout<<laespeciadidades:<<especialidad<<endl;
cout<<elsemestrees:<<semestre<<endl;
}
UNIVERSIDADPOLITCNICADEMADRID
ESCUELAUNIVERSITARIADEINFORMTICA
DPTO.LENGUAJES,PROYECTOSYSISTEMASINFORMTICOS
PROGRAMACINORIENTADAAOBJETOS
SOLUCINEXAMEN27deabrilde2011GRUPOGSM12
6. EnelanlisisdeunaaplicacinaparecenlasclasescPilaFaccionycColaFraccionquenos
permitenoperarconestructurasdinmicasdeobjetosdelaclasecFraccion.
ClasecPilaFraccion
ClasecColaFraccion
Mtodos:
Mtodos:
constructorpordefecto
constructorpordefecto
sacar,queextraelasiguiente
sacar,queextraelasiguientefraccin
delacola
fraccindelapila
meter,queintroducelasiguiente
meter,queintroducelasiguiente
fraccinenlacola
fraccinenlapila
vacia,quecompruebasilacolaest
vacia,quecompruebasilapilaest
vaca
vaca
Atributos:
Atributos:
cNodoFraccion*pInicio;
cNodoFraccion*pInicio;
//ConesteatributodeclasecNodoFraccionse
//ConesteatributodeclasecNodoFraccionse
apuntaalprimerelementodelapila
apuntaalprimerelementodelacola
Ambasclasestienenlamismaimplementacin,exceptoelmtodosacarqueesdiferenteen
ambas clases., por lo que se ha decidido disear una nueva clase cContenedor, de la que
hereden las dos clases anteriores, as como otras de caractersticas similares que se
incorporarnposteriormente.
SedisponedelasclasescNodoFraccionycFraccionyadiseadaseimplementadas.
EscribirenC++losficheros.hdelastresclasescContenedor,cPilaFraccionycColaFraccion
classcContenedor{
classcPilaFraccion:publiccContenedor{
public:
public:
cContenedor();
cPilaFraccion();
virtualcFraccionSacar()=0;
cFraccionSacar();
voidmeter(cFracccion)
};
boolvacia();
classcColaFraccion:publiccContenedor{
private:
public:
cNodoFraccion*pInicio;
cColaFraccion();
};
cFraccionSacar();
};