Examen Tema 3 POO (Solucion)

UNIVERSIDAD POLITÉCNICA DE MADRID  ESCUELA UNIVERSITARIA DE INFORMÁTICA  DPTO. LENGUAJES, PROYECTOS Y SISTEMAS INFORMÁTI

Views 114 Downloads 1 File size 130KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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