lenguaje c++ segunda parte intro. a uml, sobrecarga, polimorfismo, herencia y templates ana lila...
Post on 02-Apr-2015
118 Views
Preview:
TRANSCRIPT
Lenguaje C++Lenguaje C++Segunda parteSegunda parte
Intro. a UML, sobrecarga, Intro. a UML, sobrecarga, polimorfismo, herencia y polimorfismo, herencia y
TemplatesTemplates
Ana Lila Laureano-CrucesAna Lila Laureano-Cruces
Elena Cruz MiguelElena Cruz Miguel
Modelado VisualModelado Visual
Es modelado usando una notación Es modelado usando una notación gráfica estándarizadagráfica estándarizada
Captura las partes esenciales de un Captura las partes esenciales de un sistemasistema
Abstrae la complejidadAbstrae la complejidad El análisis de casos de uso es una El análisis de casos de uso es una
técnica para capturar el proceso del técnica para capturar el proceso del negocio desde la perspectiva del negocio desde la perspectiva del usuariousuario
UMLUML
Lenguaje Unificado de ModeladoLenguaje Unificado de Modelado Estandar para el modelado de Estandar para el modelado de
aplicaciones Orientados a Objetosaplicaciones Orientados a Objetos Es una sintaxis, no una metodologíaEs una sintaxis, no una metodología Proporciona una gran gama de Proporciona una gran gama de
diagramas y la semántica asociada a diagramas y la semántica asociada a esta.esta.
Booch, Rambaugh y Jacobson adoptaron Booch, Rambaugh y Jacobson adoptaron los siguentes objetivos:los siguentes objetivos:
Representar sistemas completos, en Representar sistemas completos, en lugar de solamente la parte de software, lugar de solamente la parte de software, usando conceptos orientados a objetos.usando conceptos orientados a objetos.
Establecer una relación explícita entre Establecer una relación explícita entre conceptos y código ejecutable.conceptos y código ejecutable.
Crear un lenguaje de modelado que Crear un lenguaje de modelado que pudiera ser usado por humanos y pudiera ser usado por humanos y máquinas.máquinas.
VentajasVentajas
UML es el lenguaje estándar para UML es el lenguaje estándar para visualizar, especificar, construir y visualizar, especificar, construir y documentar los productos de un documentar los productos de un sistema de softwaresistema de software
UML se puede usar con todos los UML se puede usar con todos los procesos, a lo largo del ciclo de vida procesos, a lo largo del ciclo de vida de desarrollo y a través de diferentes de desarrollo y a través de diferentes tecnologías de implementacióntecnologías de implementación
DiseñoDiseño
Diagramas Asociados:Diagramas Asociados: - Diagrama de Objetos- Diagrama de Objetos - Diagrama de Clases- Diagrama de Clases - Diagrama de Estados- Diagrama de Estados - Diagrama de Actividades- Diagrama de Actividades - Diagrama de Secuencia- Diagrama de Secuencia - Diagrama de Componentes- Diagrama de Componentes
Fundamental en el diseño y
Documentación de un sistema
Conceptos sobre ClasesConceptos sobre Clases Describe un grupo de objetos conDescribe un grupo de objetos con propiedades similares, con relaciones propiedades similares, con relaciones
comunes y con semántica común (mismos comunes y con semántica común (mismos atributos y patrones de comportamiento)atributos y patrones de comportamiento)
La clase de un objeto es una propiedad La clase de un objeto es una propiedad implícita de sí mismoimplícita de sí mismo
Al agrupar los objetos en clases se Al agrupar los objetos en clases se abstrae el problema, lo que da al modelo abstrae el problema, lo que da al modelo su potencia y capacidad de generalizarsu potencia y capacidad de generalizar
Diagramas de ClaseDiagramas de Clase
• • Atributos: es una propiedad del Atributos: es una propiedad del elemento, que es compartida por elemento, que es compartida por todos los objetos, y describe una todos los objetos, y describe una característica.característica.
• • Operaciones: es la implementación Operaciones: es la implementación de un servicio que muestra el de un servicio que muestra el comportamiento de la clase.comportamiento de la clase.
Un diagrama de clases se compone Un diagrama de clases se compone de un rectangulo dividido en tres de un rectangulo dividido en tres seccionessecciones
NombreDeClase
Sección de atributos
Sección de operaciones
Usuario
-nombre-edad-fechaNacimiento
+agregarUsuario+borrarUsuario+modificarUsuario
Nombre de la clase
Atributos ocaracterísticas
Comportamiento uoperaciones
visibilidad
- son privados+ son públicos
Sintaxis compactaSintaxis compacta
UsuarioAutentificaUsuario
Navegabilidad
Indica el sentido valido de recorrido
Asociación
Indica cómo esta relacionada una clase con otra
SobrecargaSobrecarga
SobrecargaSobrecarga
La sobrecarga permite definir varias La sobrecarga permite definir varias funciones que:funciones que: Tienen el mismo nombreTienen el mismo nombre El número de parámetros que reciben es El número de parámetros que reciben es
distintodistinto Los tipos de datos de retorno son igualesLos tipos de datos de retorno son iguales Los tipos de datos de los parámetros Los tipos de datos de los parámetros
pueden ser distintospueden ser distintos
SobrecargaSobrecarga
int compara(int v1,int v2)int compara(int v1,int v2) {{
if(v1>v2)if(v1>v2) return(1);return(1);
else if(v1<v2)else if(v1<v2) return(-1);return(-1);
elseelse return(0);return(0);
}}
SobrecargaSobrecarga
int compara(char *v1,char *v2)int compara(char *v1,char *v2) {{
for(int i=0;i<strlen(v1);i++)for(int i=0;i<strlen(v1);i++) if(v1[i]==v2[i])if(v1[i]==v2[i])
continue;continue; else if(v1[i]<v2[i])else if(v1[i]<v2[i])
return(-1);return(-1); elseelse
return(0);return(0);
return (if(strlen(v1)==strlen(v2)?0:-1;return (if(strlen(v1)==strlen(v2)?0:-1; }}
Sobrecarga con funcionesSobrecarga con funciones Si se utilizan parámetros con valores Si se utilizan parámetros con valores
default, la función puede representarse default, la función puede representarse con un conjunto de funciones:con un conjunto de funciones:
void funcion( int a = 50, float f = 23.45, char c = void funcion( int a = 50, float f = 23.45, char c = 'q' );'q' );
El conjunto de funciones equivalentes es:El conjunto de funciones equivalentes es:void funcion ( );void funcion ( );
void funcion( int );void funcion( int );
void funcion ( int, float );void funcion ( int, float );
void funcion ( int, float, char );void funcion ( int, float, char );
Sobrecarga de Sobrecarga de OperadoresOperadores
La sobrecarga del operador se asocia La sobrecarga del operador se asocia con la semanticacon la semantica
Se mantiene la presedencia y Se mantiene la presedencia y asociatividad en los operadoresasociatividad en los operadores
Se pueden definir formas de prefijos y Se pueden definir formas de prefijos y postfijos del mismo operador postfijos del mismo operador
Sobrecarga con Sobrecarga con Operadores Operadores
Operadores que pueden ser sobrecargadosOperadores que pueden ser sobrecargados RelacionalesRelacionales
>, <, <=, >=, !=, ==>, <, <=, >=, !=, == AritméticosAritméticos
+, -, *, /, %, ^+, -, *, /, %, ^ A nivel de bitsA nivel de bits
&, |, ~, !, <<, >>, &, |, ~, !, <<, >>, AsignaciónAsignación
=, +=, -=, *=, /=, %=, ^=, &=, |=, <<=, >>==, +=, -=, *=, /=, %=, ^=, &=, |=, <<=, >>= OtrosOtros
, &&, ||, ++, --, ->, [ ], ( ), new, delete, &&, ||, ++, --, ->, [ ], ( ), new, delete
EjemploEjemplo Sobrecarga del operador + entre numeros Sobrecarga del operador + entre numeros
imaginarios.imaginarios.
Imaginario Imginario::operator + (Imaginario i)Imaginario Imginario::operator + (Imaginario i)
{{Imaginario mi = *this;Imaginario mi = *this;
return Imaginario( im.p_real + i.p_real, return Imaginario( im.p_real + i.p_real,
im.p_imaginaria + im.p_imaginaria + i.p_imaginaria );i.p_imaginaria );
}}
PolimorfismoPolimorfismo
PolimorfismoPolimorfismo
Muchas formasMuchas formas A un mismo mensaje distinto A un mismo mensaje distinto
comportamientocomportamiento
Overriding o Redefinición Overriding o Redefinición de Funcionesde Funciones
Overriding es redefinir una función en Overriding es redefinir una función en una clase derivada:una clase derivada: mismo nombre de la función.mismo nombre de la función. mismo tipo y número de argumentos.mismo tipo y número de argumentos. mismo tipo de retorno en una clase mismo tipo de retorno en una clase
derivada.derivada.
EjemploEjemplo
class Userclass User
{{
public:public:
......
virtual int getPermissions() const;virtual int getPermissions() const;
......
}}
class Employee :public Userclass Employee :public User
{ ... }{ ... }
int Employee::getPermissions() constint Employee::getPermissions() const
{{
cout << “ Permisos Empleado\n”cout << “ Permisos Empleado\n”
}}
igual númeroy tipo deargumentos
igual tipo deretorno
Sobrecarga y Sobrecarga y sobreescriturasobreescritura
La sobrecarga se refiere a crear funciones del La sobrecarga se refiere a crear funciones del mismo nombre, pero con diferente tipo y mismo nombre, pero con diferente tipo y número de argumentos y valor de retorno número de argumentos y valor de retorno dentro de una misma clase derivada o subclase.dentro de una misma clase derivada o subclase. Las funciones resultantes son independientes Las funciones resultantes son independientes
entre sí.entre sí. La redefinición redefine una función en la clase La redefinición redefine una función en la clase
derivada con mismo tipo y número de derivada con mismo tipo y número de argumentos, y valor de retorno.argumentos, y valor de retorno. Las funciones resultantes se sobreescriben Las funciones resultantes se sobreescriben
entre sí.entre sí.
PolimorfismoPolimorfismo El polimorfismo es una de las características El polimorfismo es una de las características
centrales de la programación orientada a centrales de la programación orientada a objetos, junto con el encapsulamiento y la objetos, junto con el encapsulamiento y la herencia.herencia.
Significa que un objeto responderá a una Significa que un objeto responderá a una función de acuerdo a la definición propia que función de acuerdo a la definición propia que tiene para ese método.tiene para ese método.
Polimorfismo en C++Polimorfismo en C++
El polimorfismo en C++ trabaja sobre El polimorfismo en C++ trabaja sobre métodos heredados y/o redefinidos métodos heredados y/o redefinidos ( overriden ).( overriden ).
EjemploEjemplo
class Userclass User { ...{ ... virtual int getPermissions() const;virtual int getPermissions() const; }}
class Employee :public Userclass Employee :public User{ ... }{ ... }int Employee::getPermissions() constint Employee::getPermissions() const{{ cout << “ Permisos Empleado\n” }cout << “ Permisos Empleado\n” }
EjemploEjemplo
User user1, *user2;User user1, *user2;
Employee employee1;Employee employee1;
user2 = &employee;user2 = &employee;
user1.getPermissions(); user1.getPermissions(); // User.// User.
employee1.getPermissions(); employee1.getPermissions(); // Employee.// Employee.
Ejemplo - ( 3 de 3 ) Ejemplo - ( 3 de 3 )
int main(void )int main(void )
{{
Usuario *persons[]={new Usuario(2),Usuario *persons[]={new Usuario(2),
new Empleado(15),new Administrador(500)};new Empleado(15),new Administrador(500)};
showPermissions( persons );showPermissions( persons );
}}
void showPermissions( Usuario *usuarios[] )void showPermissions( Usuario *usuarios[] )
{{
for( int i = 0; i < 3; i++ )for( int i = 0; i < 3; i++ )
usuarios[i]->getPermisos();usuarios[i]->getPermisos();
cout << endl;cout << endl;
}}
Clases AbstractasClases Abstractas
Una clase abstracta es aquella que Una clase abstracta es aquella que define funciones virtuales puras.define funciones virtuales puras.
Las funciones virtuales puras se Las funciones virtuales puras se definen como:definen como:
virtual void print() const = 0;virtual void print() const = 0;
Herencia en C++Herencia en C++
HerenciaHerencia
Propiedad que permite crear nuevas Propiedad que permite crear nuevas clases a partir de las clases clases a partir de las clases existentesexistentes
Conserva las propiedades de la clase Conserva las propiedades de la clase original y añade nuevas original y añade nuevas característicascaracterísticas
Usado para la resolución de Usado para la resolución de problemas complejosproblemas complejos
RecomendacionesRecomendaciones
Buscar categorías, propiedades Buscar categorías, propiedades comunes y distintas que nos comunes y distintas que nos permitan clasificar los objetos.permitan clasificar los objetos.
Clase Base y Clase Clase Base y Clase DerivadaDerivada
Se le llama Clase Base a la clase de Se le llama Clase Base a la clase de la cuál van a heredar las demás.la cuál van a heredar las demás.
Se llama clase derivada a las clases Se llama clase derivada a las clases creadas a partir de una clase base.creadas a partir de una clase base.
Clase DerivadaClase Derivada
Una clase derivada hereda todos los Una clase derivada hereda todos los miembros de la clase base y miembros de la clase base y puede puede accederacceder a los miembros públicos a los miembros públicos ((publicpublic) y protegidos () y protegidos (protectedprotected) de ) de la clase o clases base, como si fueran la clase o clases base, como si fueran miembros de ella misma. Una clase miembros de ella misma. Una clase derivada derivada nono tiene acceso a los tiene acceso a los miembros privados (miembros privados (privateprivate) de la ) de la clase base.clase base.
EjemploEjemplo
PersonaPersona Propiedades comunesPropiedades comunes
NombreNombre Fecha de nacimientoFecha de nacimiento GeneroGenero Estado civilEstado civil
EmpleadoEmpleado Características adicionalesCaracterísticas adicionales
SueldoSueldo Número empleadoNúmero empleado AreaArea
AlumnoAlumno Características adicionalesCaracterísticas adicionales
MatriculaMatricula LicenciaturaLicenciatura
Jerarquía de ClasesJerarquía de Clases
Persona
Empleado Estudiante
Administrativo Académico
Modelado UMLModelado UML
ClaseBase
Sección de atributos
Sección de funciones
ClaseDerivada
Sección de atributos
Sección de funciones
Modelado UMLModelado UMLPersona
- nombre- edad- fechaNacimiento
Sección de funciones
Empleado
- idEmpleado- sueldo- area
Sección de funciones
Diagrama de clases
SintaxisSintaxis
Para la declaración de clases Para la declaración de clases derivadas, encontramos después del derivadas, encontramos después del nombre de la clase derivada, dos nombre de la clase derivada, dos puntos (:) , y luego alguna de las puntos (:) , y luego alguna de las siguientes palabras clave:siguientes palabras clave: publicpublic privateprivate protectedprotected
class class basebase{{ //Cuerpo de la clase base //Cuerpo de la clase base };};
class class derivadaderivada :[public/private/..] :[public/private/..] basebase{{ //Cuerpo de la clase derivada //Cuerpo de la clase derivada}; };
Constructores de Clases Constructores de Clases DerivadasDerivadas
Cuando una clase base tiene un constructor y una Cuando una clase base tiene un constructor y una clase derivada también, al crear el objeto, se clase derivada también, al crear el objeto, se llama primero al constructor de la clase base, y llama primero al constructor de la clase base, y cuando la ejecución de éste termina, se llama al cuando la ejecución de éste termina, se llama al constructor de la clase derivada.constructor de la clase derivada.
Gracias a que el constructor de la clase base es Gracias a que el constructor de la clase base es llamado, es posible inicializar la clase base, desde llamado, es posible inicializar la clase base, desde el constructor de la clase derivada. Esto se logra el constructor de la clase derivada. Esto se logra pasando una lista de los constructores de las pasando una lista de los constructores de las clases base, con sus respectivos parámetros. clases base, con sus respectivos parámetros.
Ejemplo PERSO.HEjemplo PERSO.H#ifndef PERSO_H#ifndef PERSO_H#define PERSO_H#define PERSO_H
#include<iostream.h>#include<iostream.h>#include<string.h>#include<string.h>#include<stdlib.h>#include<stdlib.h>
class persona{class persona{ public:public: persona::persona(char *n,int e){persona::persona(char *n,int e){
nombre=new char[strlen(n)+1];nombre=new char[strlen(n)+1]; edad=e;edad=e;
}} const char *LeerNombre(char *n) const;const char *LeerNombre(char *n) const; int LeerEdad() const{int LeerEdad() const{ return edad;return edad; }} protected:protected: char *nombre;char *nombre; int edad;int edad;};};
class empleado:public persona{class empleado:public persona{ public:public: empleado::empleado(char *n,int e,float s):persona(n,e){empleado::empleado(char *n,int e,float s):persona(n,e){
salarioanual=s;salarioanual=s; }} float leersalario() const;float leersalario() const; protected:protected: float salarioanual;float salarioanual;};};
class alumno:public persona{class alumno:public persona{ public:public: alumno::alumno(char *n,int e,double m):persona(n,e){alumno::alumno(char *n,int e,double m):persona(n,e){
matricula=m;matricula=m; }} double leermatricula() const;double leermatricula() const; protected:protected: double matricula;double matricula;};};
#endif#endif
Principal.cppPrincipal.cpp
#include<iostream.h>#include<iostream.h>#include"perso.h"#include"perso.h"#include<conio.h>#include<conio.h>
void main()void main(){ { int edad;int edad; system("cls");system("cls"); alumno edoo("mario",24,20021);alumno edoo("mario",24,20021); edad=edoo.LeerEdad();edad=edoo.LeerEdad(); cout<<edad;cout<<edad; getch();getch();}}
TemplatesTemplatesIntroducciónIntroducción
la programación clásica la programación clásica diferenciación entre los datos y su diferenciación entre los datos y su
manipulación, es decir, entre los datos y manipulación, es decir, entre los datos y el conjunto de algoritmos para el conjunto de algoritmos para manejarlos. manejarlos.
Los datos eran tipos muy simples Los datos eran tipos muy simples generalmente los algoritmos estaban generalmente los algoritmos estaban
agrupados en funciones orientadas de agrupados en funciones orientadas de forma muy específica a los datos que forma muy específica a los datos que debían manejar.debían manejar.
IntroducciónIntroducción
La POO introdujo nuevas facilidades:La POO introdujo nuevas facilidades: Extender el concepto de dato, Extender el concepto de dato, permitiendo tipos más complejos a los permitiendo tipos más complejos a los
que se podía asociar la operaciones que se podía asociar la operaciones necesarias. necesarias.
AdemásAdemás La posibilidad de ocultación de La posibilidad de ocultación de
determinados detalles internos irrelevantes determinados detalles internos irrelevantes para el usuario para el usuario
y la capacidad de herenciay la capacidad de herencia
Programación genéricaProgramación genérica
Se dieron cuenta que Se dieron cuenta que frecuentemente las manipulaciones frecuentemente las manipulaciones contienen un denominador común contienen un denominador común que se repite bajo apariencias que se repite bajo apariencias diversasdiversas criterios de ordenacióncriterios de ordenación validacionesvalidaciones
Los algoritmos deben ser Los algoritmos deben ser parametrizados al máximo.parametrizados al máximo.
Expresados de la forma más Expresados de la forma más independiente posible de detalles independiente posible de detalles concretosconcretos
permitiendo la posibilidad de servir permitiendo la posibilidad de servir para una mayor variedad posible de para una mayor variedad posible de tipos y estructuras de datos.tipos y estructuras de datos.
Algoritmo genérico que permita Algoritmo genérico que permita representar algoritmos con ciertas representar algoritmos con ciertas características comunes características comunes
Definición de los tipos: a que tipos Definición de los tipos: a que tipos pueden aplicarse este algoritmopueden aplicarse este algoritmo
Y sus reglas de uso, independiente.Y sus reglas de uso, independiente.
Las plantillas, que se introdujeron Las plantillas, que se introdujeron con la versión del Estándar de Julio con la versión del Estándar de Julio de 1998de 1998
La idea central a resaltar aquí es que La idea central a resaltar aquí es que una una plantillaplantilla genera la definición de genera la definición de una clase o de una función mediante una clase o de una función mediante uno o varios parámetros. A esta uno o varios parámetros. A esta instancia concreta de la clase o instancia concreta de la clase o función se la denomina una función se la denomina una especializaciónespecialización o o especialidadespecialidad de de la plantilla.la plantilla.
C++ utiliza una palabra clave específica C++ utiliza una palabra clave específica templatetemplate para declarar y definir funciones para declarar y definir funciones y clases genéricas. y clases genéricas.
En estos casos actúa como un especificador En estos casos actúa como un especificador de tipo y va unido al par de ángulos de tipo y va unido al par de ángulos < >< > que delimitan los argumentos de la que delimitan los argumentos de la plantilla:plantilla: template <T> void fun(T& ref); // template <T> void fun(T& ref); //
declaración de función genéricadeclaración de función genérica template <T> class C {/*...*/}; // declaración template <T> class C {/*...*/}; // declaración
de clase genéricade clase genérica
#include #include #include #include #include #include class ObjetoGenerico {class ObjetoGenerico { public:public: virtual void Dibuja() {};virtual void Dibuja() {}; };};
class Circulo : public ObjetoGenerico {class Circulo : public ObjetoGenerico { int x, y, r;int x, y, r; public:public: Circulo(int xi=100, int yi=100, int ri=100) Circulo(int xi=100, int yi=100, int ri=100) { x=xi ; y=yi; r=ri;}{ x=xi ; y=yi; r=ri;} void Dibuja() void Dibuja() { circle(x, y, r); }{ circle(x, y, r); } };};
class Elipse : public ObjetoGenerico {class Elipse : public ObjetoGenerico {int x, y, rx, ry;int x, y, rx, ry;public:public:Elipse(int xi=100, int yi=100, int rxi=60, int ryi=80)Elipse(int xi=100, int yi=100, int rxi=60, int ryi=80) { x=xi; y=yi; rx=rxi; ry=ryi; }{ x=xi; y=yi; rx=rxi; ry=ryi; }void Dibuja() void Dibuja() { ellipse(x, y, 0, 360, rx, ry) ; }{ ellipse(x, y, 0, 360, rx, ry) ; }};};class Rectangulo : public ObjetoGenerico {class Rectangulo : public ObjetoGenerico {int xizq, yarriba, ancho, alto;int xizq, yarriba, ancho, alto;public:public:Rectangulo(int xi=10, int yi=10, int an=40, int al=60)Rectangulo(int xi=10, int yi=10, int an=40, int al=60){ xizq=xi; yarriba=yi;ancho=an; alto=al; }{ xizq=xi; yarriba=yi;ancho=an; alto=al; }void Dibuja()void Dibuja() { rectangle(xizq, yarriba, xizq+ancho, yarriba+alto); }{ rectangle(xizq, yarriba, xizq+ancho, yarriba+alto); }};};
class Nodo {class Nodo {ObjetoGenerico *figura;ObjetoGenerico *figura;Nodo *sig;Nodo *sig;public:public:Nodo(ObjetoGenerico *fig)Nodo(ObjetoGenerico *fig) { figura=fig; }{ figura=fig; }Nodo * RecuperaSiguiente()Nodo * RecuperaSiguiente() { return sig; }{ return sig; }void PonerSiguiente(Nodo *nodosig)void PonerSiguiente(Nodo *nodosig) { sig=nodosig; }{ sig=nodosig; }void Muestra()void Muestra() { figura->Dibuja(); }{ figura->Dibuja(); }};};
class Lista {class Lista {Nodo *cabeza;Nodo *cabeza;public:public:Lista()Lista(){ cabeza=new Nodo(NULL); cabeza->PonerSiguiente(NULL); }{ cabeza=new Nodo(NULL); cabeza->PonerSiguiente(NULL); }void Insertar (ObjetoGenerico *fig);void Insertar (ObjetoGenerico *fig);void Desplegar();void Desplegar();};};void Lista::Insertar(ObjetoGenerico *fig)void Lista::Insertar(ObjetoGenerico *fig){{ Nodo *aux;Nodo *aux; For(aux=cabeza; aux->RecuperaSiguiente()!=NULL; aux=aux-For(aux=cabeza; aux->RecuperaSiguiente()!=NULL; aux=aux-
>RecuperaSiguiente());>RecuperaSiguiente()); Nodo *nuevo = new Nodo(fig);Nodo *nuevo = new Nodo(fig); nuevo->PonerSiguiente(NULL);nuevo->PonerSiguiente(NULL); aux->PonerSiguiente(nuevo);aux->PonerSiguiente(nuevo);}}void Lista::Desplegar()void Lista::Desplegar(){ Nodo *aux;{ Nodo *aux;for(aux=cabeza->RecuperaSiguiente(); aux!=NULL; aux=aux-for(aux=cabeza->RecuperaSiguiente(); aux!=NULL; aux=aux-
>RecuperaSiguiente())>RecuperaSiguiente())aux->Muestra();aux->Muestra();}}
void main()void main() {{ int graphdriver = DETECT, graphmode;int graphdriver = DETECT, graphmode; initgraph(&graphdriver, &graphmode, "..\\bgi");initgraph(&graphdriver, &graphmode, "..\\bgi"); Lista ListaFig;Lista ListaFig; Circulo *c1 = new Circulo(50,50,80);Circulo *c1 = new Circulo(50,50,80); ListaFig.Insertar(c1);ListaFig.Insertar(c1); Elipse *e1 = new Elipse;Elipse *e1 = new Elipse; ListaFig.Insertar(e1);ListaFig.Insertar(e1); Rectangulo *r1 = new Rectangulo(30,50);Rectangulo *r1 = new Rectangulo(30,50); ListaFig.Insertar(r1);ListaFig.Insertar(r1); ListaFig.Desplegar();ListaFig.Desplegar(); closegraph();closegraph(); }}
top related