Está en la página 1de 3

Programacion Orientada a Objetos

Examen de evaluacin continua o


Curso 2007-08 Jueves 29 de mayo de 2008 5,0 p

1. Dado el siguiente diagrama, dena las clases que aparecen escribiendo exclusivamente los miembros imprescindibles para implementar las relaciones.

rel1 B 0..1 0..* rel3 1..* C rel4 D rel5 1..*

rel2 E

rel7

rel6

#include <set> class D; class A {}; class B: public A { public: void rel3(D& d); private: std::set<D> ds; }; class D { public: void rel3(B& b); private: B b; }; class C { D d; }; class E: public A {

public: void rel5(D& d); private: std::set<D> ds; }; class F: public C, public E {};

2. Dadas las siguientes deniciones de clases:


#include <iostream> #include <string> using namespace std; class X { public: X(string s = "por omisin") { cout << "Constructor de X: " << s << endl; } o }; class A { X x; public: A(): x("A") { cout << "Constructor de A" << endl; } void f() { cout << "Mtodo f() de A" << endl; } e }; class B: virtual public A { X x; public: B() { cout << "Constructor de B" << endl; } void f() { cout << "Mtodo f() de B" << endl; } e }; class C: virtual public A { X x; public: C() { cout << "Constructor de C" << endl; } void f() { cout << "Mtodo f() de C" << endl; } e }; class D: public B, public C { X x; public: D(): x("D") { cout << "Constructor de D" << endl; } };

5,0 p

Cuntos atributos y cuntos mtodos tiene la clase D? a a e Tiene cuatro atributos y tres mtodos (explicar). e Hay algn miembro duplicado? u No (explicar). Cmo se accede a cada uno de los miembros? o D d; d.A::f(); d.B::f(); d.C::f(); A los atributos no se puede acceder desde fuera porque son privados. 2

0,5 p 0,5 p 0,5 p

A continuacin, considere el siguiente programa, que incluye dichas deniciones: o


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include "herencia.h" int main() { A pa; B pb; D d, pd; pd = &d; pa = &d; pa>f(); pb = &d; pb>f(); d = pa; pd = (D )pb; pd>B::f(); d.C::f(); }

Diga si hay ambigedades en la funcin main(). En tal caso, resulvalas. u o e No hay ambigedades u Diga si despus de resolver las ambigedades hay errores en la funcin main(). En tal caso, e u o elim nelos.
pruebaconerrores.cpp: In function int main(): pruebaconerrores.cpp:14: error: no match for operator= in d = * pa herencia.h:33: note: candidates are: D& D::operator=(const D&) 14 // d = pa;

1,0 p 0,5 p

Diga lo que imprimir el programa una vez subsanadas las ambigedades y dems errores. a u a
Constructor de X: Constructor de A Constructor de X: Constructor de B Constructor de X: Constructor de C Constructor de X: Constructor de D Mtodo f() de A e Mtodo f() de B e Mtodo f() de B e Mtodo f() de C e A por omisin o por omisin o D

2,0 p

También podría gustarte