Beruflich Dokumente
Kultur Dokumente
1. [001.txt] Partiendo del programa desarrollado en el ejercicio anterior (Bloque II), se realizaran varias modifi-
caciones relacionadas con herencia, composicion, polimorfismo, y gestion de excepciones.
El ejercicio anterior suponı́a la creación de una clase Grupo, formada por un numero variable de usuarios, y que
se implementó como un array dinámico de objetos de la clase Usuario. El primer cambio va a consistir en que
la parte dinámica del grupo va a estar formada por fotos y vı́deos. La idea es que en una red social cualquiera
de los miembros de un grupo podrı́a publicar y compartir archivos de fotos y vı́deos. La clase Archivo podrı́a ser
similar a esta:
c l a s s Archivo {
public :
const s t r i n g &g e t T i t u l o ( ) ;
const s t r i n g &getRuta ( ) ;
v i r t u a l const s t r i n g &t o S t r i n g ( ) = 0 ;
Archivo ( const s t r i n g &r , const s t r i n g &t ) ;
private :
s t r i n g ruta ;
string titulo ;
};
Grupo g1 ( ”AVIA” ) ;
Grupo g2 ( ”LIMIA” ) ;
Página 1 de 7
Práctica
Solución:
// f o t o s Y V i d e o s . h
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#i f n d e f FOTOSYVIDEOS H INCLUDED
#define FOTOSYVIDEOS H INCLUDED
#include <v e c t o r >
#include <s t r i n g >
#include <i o s t r e a m >
#include <c s t r i n g >
#include <c s t d l i b >
using namespace s t d ;
const int TAM MAXIMO=100;
c l a s s Archivo ;
c l a s s Grupo {
private :
char nombre [TAM MAXIMO ] ;
char imagen [TAM MAXIMO ] ;
char d e s c r i p c i o n [TAM MAXIMO ] ;
char web [TAM MAXIMO ] ;
v e c t o r <Archivo ∗> al m ac e n A r c h i v os ;
public :
Grupo ( const char ∗ s ) ;
s t r i n g obtenerNombre ( ) ;
friend i s t r e a m & operator >>(i s t r e a m &i , Grupo & g ) ;
friend ostream & operator <<(ostream &i , Grupo & g ) ;
friend bool operator <(Grupo &a , Grupo& b ) ;
Grupo& operator −−() ;
friend Grupo& operator+( int n , Grupo & g ) ;
};
c l a s s Archivo {
public :
v i r t u a l ˜ Archivo ( ) ;
const s t r i n g &g e t T i t u l o ( ) {
return t i t u l o ;
}
const s t r i n g &getRuta ( ) {
return r u t a ;
Página 2 de 7
Práctica
}
v i r t u a l const s t r i n g t o S t r i n g ( ) = 0 ;
Archivo ( const s t r i n g &r , const s t r i n g &t ) ;
private :
s t r i n g ruta ;
string titulo ;
};
};
};
// f o t o s Y V i d e o s . cpp
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
//#i n c l u d e ” f o t o s Y v i d e o s . h”
}
Foto : : Foto ( s t r i n g u r l , s t r i n g t i t u l o , s t r i n g album )
: Archivo ( u r l , t i t u l o ) , album ( album ) {
}
Foto : : ˜ Foto ( ) {
Página 3 de 7
Práctica
}
s t r i n g Grupo : : obtenerNombre ( ) {
return nombre ;
}
const s t r i n g Foto : : t o S t r i n g ( ) {
string ret ;
r e t+= g e t T i t u l o ( ) ;
r e t+=” , ” ;
r e t+= getRuta ( ) ;
r e t+=” , ” ;
r e t+= getAlbum ( ) ;
return r e t ;
Video : : ˜ Video ( ) {
Video : : Video ( s t r i n g u r l , s t r i n g t i t u l o , s t r i n g c o d i g o I n s e r t a r )
: Archivo ( u r l , t i t u l o ) , c o d i g o I n s e r t a r ( c o d i g o I n s e r t a r ) {
};
const s t r i n g Video : : t o S t r i n g ( ) {
string ret ;
r e t+= g e t T i t u l o ( ) ;
r e t+=” , ” ;
r e t+= getRuta ( ) ;
r e t+=” , ” ;
r e t+= g e t C o d i g o I n s e r t a r ( ) ;
return r e t ;
Página 4 de 7
Práctica
c i n >>c ;
i f ( c==’F ’ or c==’V ’ or c==’ S ’ ) {
switch ( c ) {
case ’F ’ :
cout<<” I n t r o d u c e l a u r l de l a f o t o : ” ;
i . ignore () ;
getline ( i , url ) ;
cout<<” I n t r o d u c e e l t i t u l o de l a f o t o : ” ;
getline ( i , titulo ) ;
cout<<” I n t r o d u c e e l album de l a f o t o : ” ;
g e t l i n e ( i , album ) ;
tmp=new Foto ( u r l , t i t u l o , album ) ;
g . al m ac e n A r c h i v os . push back ( tmp ) ;
break ;
case ’V ’ :
cout<<” I n t r o d u c e l a u r l d e l v i d e o : ” ;
i . ignore () ;
getline ( i , url ) ;
cout<<” I n t r o d u c e e l t i t u l o d e l v i d e o : ” ;
getline ( i , titulo ) ;
cout<<” I n t r o d u c e e l ancho d e l v i d e o : ” ;
c i n >>ancho ;
cout<<” I n t r o d u c e e l a l t o d e l v i d e o : ” ;
c i n >>a l t o ;
c o d i g o I n s e r t a r=codigoHTML ( ancho , a l t o ) ;
tmp=new Video ( u r l , t i t u l o , c o d i g o I n s e r t a r ) ;
g . al m ac e n A r c h i v os . push back ( tmp ) ;
break ;
} else {
cout<<” El s i m b o l o i n t r o d u c i o d o e s i n c o r r e c t o : ”<<e n d l ;
}
} while ( c != ’ S ’ ) ;
return i ;
}
return cadena ;
}
bool operator <(Grupo &a , Grupo& b ) {
return a . al m ac e n A r c h i v os . s i z e ( ) < b . al m ac e n A r c h i v os . s i z e ( ) ;
}
Grupo& Grupo : : operator −−() {
al m ac e n A r c h i v os . pop back ( ) ;
return ∗ t h i s ;
}
Grupo& operator+( int n , Grupo & g ) {
//Que s e supone que hacemos a q u i ?
// El v e c t o r s e amplia s o l o
Página 5 de 7
Práctica
return o ;
}
// main . cpp
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#include <i o s t r e a m >
//#i n c l u d e ” f o t o s Y v i d e o s . h”
using namespace s t d ;
int main ( ) {
unsigned int num ;
char cad [ 3 ] ;
Grupo g1 ( ”AVIA” ) ;
Grupo g2 ( ”LIMIA” ) ;
Página 6 de 7
Práctica
Página 7 de 7