UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INFORMÁTICA DPTO. LENGUAJES, PROYECTOS Y SISTEMAS INFORMÁTI
Views 114 Downloads 1 File size 130KB
UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INFORMÁTICA DPTO. LENGUAJES, PROYECTOS Y SISTEMAS INFORMÁTICOS PROGRAMACIÓN ORIENTADA A OBJETOS SOLUCIÓN EXAMEN 27 de abril de 2011 GRUPO GSM12 1. Indicar cómo se puede especializar una clase derivada respecto a su clase base en una jerarquía de herencia. Añadiendo atributos o métodos y redefiniendo métodos heredados de la clase base. 2. Indicar las diferencias más considerables entre las relaciones de composición, asociación y dependencia frente a la relación de herencia. Composición, asociación y dependencia se establecen a través de colaboraciones entre objetos de las clases que se reflejan en el código en la existencia de mensajes entre objetos de dichas clases. La relación de herencia implica la transmisión de atributos y métodos de unas clases a otras, lo que no sucede en las otras relaciones 3. Explicar qué es una clase abstracta y si dada una clase abstracta se pueden: ⋅ Construir objetos de esa clase ⋅ Declarar punteros a esa clase ⋅ Declarar parámetros por referencia a esa clase Las clases abstractas son aquellas en las que al menos un método no está implementado. Tienen al menos un método virtual puro No se pueden construir objetos de las clases abstractas Sí se pueden declarar punteros a esa clase Sí se pueden declarar parámetros por referencia a esa clase 4. Explicar las llamadas a constructores y destructores de la clase base al construir y destruir un objeto de su clase derivada. • Cuando se crea un objeto de una clase derivada, siempre se invoca en primer lugar (implícita o explícitamente) a un constructor de la clase base. • Explícitamente: mediante la lista de inicializaciones en los constructores de la clase hija. (ej: Hija(int a,int b): Base(a,b), {};) • Implícitamente: Si no se especifica uno, se ejecuta el constructor por defecto de la clase base. Para el caso de los destructores: cuando se destruye un objeto de una clase derivada, se invoca primero al destructor de la clase derivada y al final se invoca al destructor de la clase base
UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INFORMÁTICA DPTO. LENGUAJES, PROYECTOS Y SISTEMAS INFORMÁTICOS PROGRAMACIÓN ORIENTADA A OBJETOS SOLUCIÓN EXAMEN 27 de abril de 2011 GRUPO GSM12 5. A partir de la definición en C++ de la clase cAsignatura dada a continuación. class cAsignatura{ private: string nombre; string temario[10]; public: cAsignatura(); cAsignatura(const cAsignatura &); string getNombre(); string getTemariol(); void operator = (cAsignatura); void mostrar(); //muestra en pantalla el valor de todos los atributos del objeto }; Se ha definido la clase cAsignaturaOptativa como clase heredada de cAsignatura, añadiendo un atributo para indicar la especialidad a la que pertenece y otro para indicar el semestre en el que se imparte. Definir e implementar la clase cAsignaturaOptativa, que proporcione la misma funcionalidad que la clase cAsignatura. Para ello añadir o redefinir los constructores y los métodos heredados necesarios de la clase cAsignatura en esta clase. Se debe escribir cAsignaturaOptativa.h y cAsignaturaOptativa.cpp Fichero cAsignaturaOptativa.h
class cAsignaturaOptativa:public cAsignatura{ private: string especialidad; string semestre; public: cAsignaturaOptativa (); cAsignaturaOptativa (const cAsignaturaOptativa &); void operator = (cAsignaturaOptativa); void mostrar(); };
Fichero cAsignaturaOptativa.pp cAsignaturaOtativa::cAsignaturaOptativa ():cAsignatura(){ especialidad=” “; semestre=” “; } cAsignaturaOtativa::cAsignaturaOptativa (const cAsignaturaOptativa & Asig):cAsignatura(Asig){ especialidad=Asig. especialidad; semestre=Asig.semestre; } void cAsignaturaOptativa::operator = (cAsignaturaOptativa Asig){ cAsignatura::operator = (Asig); especialidad=Asig. especialidad; semestre=Asig.semestre; } void cAsignaturaOptativa ::mostrar(){; cAsignatura:: mostrar(); cout