2 poo: herencia y polimorfismo

C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
OBJETIVOS
Escribir programas orientado a objetos aplicando
herencia simple y múltiple.
Escribir programas orientado a objetos aplicando
polimorfismo.
LABORATORIO
2
Msc. Walter Fernandez Toglio.
POO: HERENCIA Y
POLIMORFISMO
1
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
TEMAS
Herencia(public, private, protected)
Polimorfismo(métodos virtuales)
SOFTWARE NECESARIO
Dev-C++ 4.9.9.2
http://sourceforge.net/projects/dev-cpp/files/Binaries/
NetBeans IDE C/C++
http://netbeans.org/features/cpp/
Code::Blocks
http://www.codeblocks.org/downloads/26
Eclipse C++
http://www.eclipse.org/downloads/packages/eclipse-ide-ccdevelopers-includes-incubating-components/indigosr1
Visual C++
http://www.microsoft.com/visualstudio/eng/products/visual-studioexpress-products
Borland C++
http://edn.embarcadero.com/article/20633
Msc. Walter Fernandez Toglio.
2
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
MARCO TEÓRICO
 Documentación y ejercicios del documento de teoría.
Msc. Walter Fernandez Toglio.
3
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
ACTIVIDADES
Analizar y explicar el funcionamiento de .cada uno de los ejemplos.
EJEMPLO 1
Implemente en C++ la siguiente jerarquía de clases:
SOLUCIÓN
#include <iostream>
#include <stdlib.h>
using namespace std;
class Barco {
private:
char nombre[30];
float peso;
public:
void LeerDatosBarco();
void EscribirDatosBarco();
//Constructores y demás funciones básicas de barco
};
void Barco::LeerDatosBarco()
{
cout<<endl<<endl<<"***Datos Barco***";
Msc. Walter Fernandez Toglio.
4
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
cout<<endl<<"Nombre: ";
cin>>nombre;
cout<<endl<<"Peso: ";
cin>>peso;
}
void Barco::EscribirDatosBarco()
{
cout<<endl<<endl<<"***Datos Barco***";
cout<<endl<<"Nombre: ";
cout<<nombre;
cout<<endl<<"Peso: ";
cout<<peso;
}
class Carguero: public Barco { // Esta es la manera de especificar que hereda de
Barco
private:
float carga;
//El resto de cosas
public:
void LeerDatosCarguero();
void EscribirDatosCarguero();
};
void Carguero::LeerDatosCarguero()
{
cout<<endl<<"***Datos Carguero***";
LeerDatosBarco();
cout<<endl<<"Carga: ";
cin>>carga;
}
void Carguero::EscribirDatosCarguero()
{
EscribirDatosBarco();
cout<<endl<<"***Datos Carguero***";
cout<<endl<<"Carga: ";
cout<<carga;
}
class Acorazado: public Barco {
private:
int numeroArmas;
int Soldados;
// Elresto de cosas
public:
void LeerDatosAcorazado();
void EscribirDatosAcorazado();
};
void Acorazado::LeerDatosAcorazado()
{
cout<<endl<<"***Datos Acorazado";
this->LeerDatosBarco();
cout<<endl<<"Numero de Armas: ";
cin>>numeroArmas;
cout<<endl<<"Soldados: ";
Msc. Walter Fernandez Toglio.
5
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
cin>>Soldados;
}
void Acorazado::EscribirDatosAcorazado()
{
EscribirDatosBarco();
cout<<endl<<"***Datos Acorazado***";
cout<<endl<<"Numero de Armas: ";
cout<<numeroArmas;
cout<<endl<<"Soldados: ";
cout<<Soldados;
}
int main(void)
{
Carguero *ObjCar=new Carguero;
Acorazado *ObjAcor=new Acorazado;
ObjCar->LeerDatosCarguero();
ObjCar->EscribirDatosCarguero();
ObjAcor->LeerDatosAcorazado();
ObjAcor->EscribirDatosAcorazado();
system("PAUSE");
return 1;
}
Msc. Walter Fernandez Toglio.
6
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
EJEMPLO 2
Escriba un programa con una clase padre que contenga el nombre, calle, ciudad, estado y código
postal, y clases derivadas que añadan información sobre el kilometraje acumulado en una línea aérea
y en la renta de autos.
# include <iostream.h>
# include <string.h>
char cr;
class cliente
{
private:
char nombre [60];
calle [60];
ciudad [20];
provincia [15];
c_postal [10];
public:
void salida_datos( void );
void entrada_datos( void );
};
class linea_aerea: public cliente
{
private:
char tipo_linea_aerea[20];
float kms_vuelo_acum;
public:
void cliente_linea_aerea( );
void escribe_kms_volados( );
};
class renta_de_autos: public cliente
{
char tipo_renta_de_autos[20];
float kms_auto_acum;
public:
void cliente_renta_de_autos( );
void escribe_kms_rodados( );
};
SOLUCIÓN
# include <iostream>
# include <string.h>
using namespace std;
class cliente
{
private:
char nombre [60];
char rcalle [60];
char ciudad [20];
char provincia [15];
char c_postal [10];
public:
void salida_datos( void );
void entrada_datos( void );
};
Msc. Walter Fernandez Toglio.
7
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
void cliente::entrada_datos()
{
fflush(stdin);
cout<<endl;
cout<<"________________________________________________"<<endl;
cout<<endl<<"Nombre: ";
cin>>nombre;
fflush(stdin);
cout<<endl<<"calle: ";
gets(rcalle);
cout<<endl<<"Ciudad: ";
cin>>this->ciudad;
cout<<endl<<"Provincia: ";
cin>>this->provincia;
cout<<endl;
cout<<"________________________________________________"<<endl;
}
void cliente::salida_datos()
{
cout<<endl;
cout<<"________________________________________________"<<endl;
cout<<endl<<"Nombre: "<<nombre;
cout<<endl<<"calle: "<<rcalle;
cout<<endl<<"Ciudad: "<<this->ciudad;
cout<<endl<<"Provincia: "<<this->provincia;
cout<<endl;
cout<<"________________________________________________"<<endl;
}
class linea_aerea: public cliente
{
private:
char tipo_linea_aerea[20];
float kms_vuelo_acum;
public:
void cliente_linea_aerea( );
void escribe_kms_volados( );
};
void linea_aerea::cliente_linea_aerea()
{
this->entrada_datos();
cout<<endl;
cout<<"________________________________________________"<<endl;
cout<<endl<<"Tipo linea aerea: ";
cin>>tipo_linea_aerea;
cout<<endl<<"Kms acumulados: ";
cin>>this->kms_vuelo_acum;
cout<<endl;
cout<<"________________________________________________"<<endl;
}
void linea_aerea::escribe_kms_volados()
{
cout<<endl;
this->salida_datos();
cout<<"________________________________________________"<<endl;
Msc. Walter Fernandez Toglio.
8
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
cout<<endl<<"Kms acumulados: "<<this->kms_vuelo_acum;
cout<<endl;
cout<<"________________________________________________"<<endl;
}
class renta_de_autos: public cliente
{
char tipo_renta_de_autos[20];
float kms_auto_acum;
public:
void cliente_renta_de_autos( );
void escribe_kms_rodados( );
};
int main()
{
linea_aerea x;
x.cliente_linea_aerea();
x.escribe_kms_volados();
system("pause");
}
Msc. Walter Fernandez Toglio.
9
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
EJEMPLO 3
En este ejercicio debe tratar de implementar la clase MiString, la cual permite utilizar de manera más
intuitiva las cadenas. Es importante que haga bien este ejercicio porque le servirá para el ejercicio 3.
//MiString.h
class MiString
{
private:
char *str; //cadena
public:
MiString();
MiString(char *t);
~MiString(){ delete [] str; } //destructor
friend istream &operator>>(istream &ci, MiString &s);
friend ostream &operator<<(ostream &co, MiString &s);
char operator[](int i);
bool operator==(char*t);
void operator=(char *t); //sobrecarga
int GetLen(){ return strlen(str); }
};
Se deben sobrecargar los siguientes operadores:
 De inserción << y de extracción >> para poder pedir el texto e imprimirlo.
 Operador == para comparar con una cadena de texto.
 El operador [ ] para poder acceder directamente a un elemento de la cadena.
//main.cpp
void main()
{
MiString cs;
while(1)
{
cout << "\nDar una frase:?";
cin >> cs;
cout << "La frase al reves es:";
for (int i=cs.GetLen()-1; i>=0;i--)
{
cout<<cs[i];
}
cout << "\nDesea Salir? SI o NO:?";
MiString cs1;
cin >> cs1;
if (cs1 == "SI")
break;
}
cout << "\nAdios.."<<endl;
}
SOLUCIÓN
//MiString.h
#include<iostream>
using namespace std;
class MiString
{
private:
char *str; //cadena
public:
Msc. Walter Fernandez Toglio.
10
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
MiString();
MiString(char *t);
~MiString()
{
delete [] str;
} //destructor
friend istream &operator>>(istream &ci, MiString &s);
friend ostream &operator<<(ostream &co, MiString &s);
char operator[](int i);
bool operator==(char*t);
void operator=(char *t); //sobrecarga
void operator=(MiString &s); //sobrecarga
int GetLen()
{
return strlen(str);
}
};
MiString::MiString()
{
}
MiString::MiString(char *t)
{
str=new char[60];
strcpy(str,t);
}
ostream &operator<<(ostream &os,MiString &c)
{
os << c.str;
return os;
}
istream &operator>>(istream &is,MiString &c)
{
cout << "Escriba un nombre: " <<endl;
//is >> c.str;
fflush(stdin);
gets(c.str);
return is;
}
bool MiString::operator ==(char *t)
{
return (strcmp(this->str, t)==0);
}
void MiString::operator =(char *t)
{
strcpy(this->str, t);
}
void MiString::operator =(MiString &s)
{
strcpy(this->str, s.str);
}
int main()
{
MiString obj("SANDRA TERESA");
cout<<endl<< obj <<endl;
Msc. Walter Fernandez Toglio.
11
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
cout<<endl<<"Longitud: "<<obj.GetLen()<<endl;
cin>>obj;
cout<<endl<< obj <<endl;
cout<<endl<<"Longitud: "<<obj.GetLen()<<endl;
MiString obj2("TERESA");
//if(obj=="TERESA")
if(obj.operator ==("TERESA"))
{
cout<<endl<<"Iguales";
}
else
{
cout<<endl<<"No iguales";
}
obj="ALBERTO";
cout<<endl<<obj;
cout<<endl<<"Longitud: "<<obj.GetLen()<<endl;
/////////////////////////////////////////////////////////////////
/* if(obj==obj2)
{
cout<<endl<<"Iguales";
}
else
{
cout<<endl<<"No iguales";
}
*/
obj2="UTP";
obj=obj2;
cout<<endl<<obj;
cout<<endl<<"Longitud: "<<obj.GetLen()<<endl;
system("pause");
return 1;
}
Msc. Walter Fernandez Toglio.
12
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
EJERCICIOS
1 Escriba un programa con una clase padre que contenga el nombre, calle, ciudad, estado y código
postal, y clases derivadas que añadan información sobre el kilometraje acumulado en una línea
aérea y en la renta de autos.
# include <iostream.h>
# include <string.h>
char cr;
class cliente
{
private:
char nombre [60];
calle [60];
ciudad [20];
provincia [15];
c_postal [10];
public:
void salida_datos( void );
void entrada_datos( void );
};
class linea_aerea: public cliente
{
private:
char tipo_linea_aerea[20];
float kms_vuelo_acum;
public:
void cliente_linea_aerea( );
void escribe_kms_volados( );
};
class renta_de_autos: public cliente
{
char tipo_renta_de_autos[20];
float kms_auto_acum;
public:
void cliente_renta_de_autos( );
void escribe_kms_rodados( );
};
Msc. Walter Fernandez Toglio.
13
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
2 En este ejercicio debe tratar de implementar la clase MiString, la cual permite utilizar de manera
más intuitiva las cadenas. Es importante que haga bien este ejercicio porque le servirá para el
ejercicio 3.
//MiString.h
class MiString
{
private:
char *str; //cadena
public:
MiString();
MiString(char *t);
~MiString(){ delete [] str; } //destructor
friend istream &operator>>(istream &ci, MiString &s);
friend ostream &operator<<(ostream &co, MiString &s);
char operator[](int i);
bool operator==(char*t);
void operator=(char *t); //sobrecarga
int GetLen(){ return strlen(str); }
};
Se deben sobrecargar los siguientes operadores:
 De inserción << y de extracción >> para poder pedir el texto e imprimirlo.
 Operador == para comparar con una cadena de texto.
 El operador [ ] para poder acceder directamente a un elemento de la cadena.
//main.cpp
void main()
{
MiString cs;
while(1)
{
cout << "\nDar una frase:?";
cin >> cs;
cout << "La frase al reves es:";
for (int i=cs.GetLen()-1; i>=0;i--)
{
cout<<cs[i];
}
cout << "\nDesea Salir? SI o NO:?";
MiString cs1;
cin >> cs1;
if (cs1 == "SI")
break;
}
cout << "\nAdios.."<<endl;
}
Msc. Walter Fernandez Toglio.
14
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
3 Diseñar la siguiente jerarquia de clases:
Nota. Para los atributos que son cadena de caracteres se debe usar la clase MiString para la
extracción, inserción, asignación.
Ecriba un programa que manipule la jerarquia de clases, lea un objeto de cada clase y visualice.
(Utilizando Funciones virtuales)
Empleado.h
#include <iostream>
using namespace std;
class empleado
{
protected :
MiString nombre;
long salario;
public:
empleado(char*, long);
void display() {cout << "Nada\n";}
};
class directivo : public empleado
{
private:
MiString titulo;
public:
directivo(char*, long, char*);
void display()
{
cout << " El directivo " << nombre << " gana " << salario<< " y
tiene el titulo de " << titulo << endl;
}
};
Msc. Walter Fernandez Toglio.
15
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
class operario : public empleado
{
protected:
MiString puesto;
public:
operario(char*, long, char*);
void display()
{
cout << " El operario " << nombre << " gana " << salario<< " y ocupa
un puesto de " << puesto << endl;
}
};
class tecnico : public operario
{
public:
tecnico(char*, long, char*);
void display()
{
cout << " El tecnico " << nombre<< " gana " << salario<< " y ocupa
un puesto de "<< puesto << endl;
}
};
class oficial : public operario
{
public:
oficial(char*, long, char*);
void display()
{
cout << " El oficial " << nombre<< " gana " << salario<< " y ocupa
un puesto de "<< puesto << endl;
}
};
Empleado.cpp
// Fichero Empleos.cpp
// funciones miembro de clases Directivo y Operario
#include "Empleos.h"
#include <iostream>
#include <string.h>
using namespace std;
// definición de los constructores
empleado::empleado(char* name = "", long sueldo = 0): salario(sueldo)
{
strcpy(nombre, name);
}
directivo::directivo(char* name = "", long sueldo = 0,char* title = "")
: empleado(
,
)
{
strcpy(titulo, title);
}
Msc. Walter Fernandez Toglio.
16
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
operario::operario(char* name = "", long sueldo = 0,char* job = "") :
empleado(
,
)
{
strcpy(
,
);
}
tecnico::tecnico(char* name = "", long sueldo = 0,char* job ="") :
operario(
,
,
)
{
;
}
oficial::oficial(char* name = "", long sueldo = 0,char* job ="") :
operario(
,
,
)
{
;
}
Empresa,cpp
// fichero empresa.cpp
// utilización de la clase empleos
#include <iostream>
#include "Empleos.h"
using namespace std;
void main(void)
{
// punteros a objetos de distintas clases
directivo *m;
operario *j;
oficial *k;
tecnico *i;
// creación de cuatro objetos de distintas clases
m = new directivo("Maria", 260000, "Ingeniera");
j = new operario("Juan", 160000, "Soldador");
k = new oficial("Koldo", 180000, "Teniente");
i = new tecnico("Ignacio", 250000, "Ingeniero");
// vector de punteros a la clase base
empleado *lista[8];
// se guardan direcciones de objetos de
// distintas clases
lista[0] = m; lista[1] = j; lista[2] = k; lista[3] = i;
lista[4] = new directivo("PEDRO", 2500000, "Economista");
lista[5] = new operario("Leire", 25000, "Becaria");
lista[6] = new oficial("Jon", 1500000, "Entrenador");
lista[7] = new tecnico("Mario", 1600000, "Electricista");
// Se tratan todos los objetos de las distintas clases de una forma
unificada
for (int ii=0; ii<8; ii++)
lista[ii]->display();
cout << "Ya he terminado." << endl;
system("pause");
}
Msc. Walter Fernandez Toglio.
17
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
4 Implementar una jerarquia de herencia de animales tal que contenga al menos seis niveles de
derivación y doce clases.
Ejemplo (Animales, Vertebrados, Invertebrados, Mamíferos, Anfibios, Aves, Reptiles etc. )
Condición
 Usar clases abstractas
5 Dada las siguientes jerarquía de clases
Haga las correciones necesarias del siguiente código:
#include <iostream>
#include <string.h>
using namespace std;
class empleado
{
private:
char nombre[31];
public:
empleado();
empleado(const char *nom);
char *devolver_nombre();
Msc. Walter Fernandez Toglio.
18
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
float calcular_pago() {return 0.0;}
};
class subcontratado : public empleado
{
private:
float tarifa;
float no_horas;
public:
subcontratado(const char *nom);
void fijar_tarifa(float tar);
void contar_horas(float horas);
float calcular_pago();
};
// constructor para la clase subcontratado
subcontratado::subcontratado(const char *nom): empleado(nom)
{
tarifa = 0.0;
no_horas = 0.0;
};
class vendedor : public subcontratado
{
private:
float comision;
float ventas_realizadas;
public:
vendedor(const char *nom);
void fijar_comision(float com);
void contar_ventas(float ventas);
float calcular_pago();
};
class encargado : public empleado
{
private:
float sueldo_mensual;
public:
encargado(const char *nom);
void fijar_sueldo(float sueldo);
float calcular_pago();
};
float subcontratado::calcular_pago()
{
return tarifa * no_horas;
};
float vendedor::calcular_pago()
{
return (subcontratado::calcular_pago() + comision *
ventas_realizadas);
};
Msc. Walter Fernandez Toglio.
19
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
float encargado::calcular_pago()
{
return sueldo_mensual;
};
int main()
{
system("pause");
return 1;
}
UIna vez corregido el programa anterior agregue la siguiente clase:
class encargado_ventas : public encargado, public vendedor
{
... // definición de variables y funciones miembro
};
Nota. Analizar lo siguiente:
class subcontratado : public virtual empleado {...};
class encargado : public virtual empleado {...};
Msc. Walter Fernandez Toglio.
20
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
6 Se desea desarrollar un sistema de contabilidad para una empresa de televisión por cable
que atienda los siguientes requisitos:
 El sistema debe almacenar el nombre, dirección, número de teléfono y descuentos aplicables a
cada uno de sus clientes.
 Un cliente puede tener más de una cuenta ya que es posible tener contratado el servicio en
distintos domicilios de una misma persona, pero una cuenta sólo es de un cliente.
 El sistema debe almacenar la información relativa a los servicios estándar que ofrece la
empresa y los precios de dichos servicios.
 Una cuenta activa implica el abono del cliente al paquete básico de servicios.
 Cada cliente puede elegir servicios adicionales para una de sus cuentas, lo que obligará al
sistema a almacenar la fecha de suscripción a cada servicio adicional y la fecha baja en el
mismo. Un servicio generalmente se refiere a un paquete de canales.
 Es imprescindible almacenar información sobre las peticiones de eventos de pago por visión
(pay per view), así como los eventos disponibles en cada momento.
 La empresa puede cargar en la cuenta del cliente conceptos extraodinarios como la instalación
o el alquiler de algún elemento hardware propiedad de la empresa como el decodificador o
similares.
 De igual forma, al cliente se le pueden realizar ingresos excepcionales en su cuenta como
resultado de aplicarle promociones o como consecuencia de interrupciones en el servicio.
 El sistema almacenará información sobre los cobros a clientes (fecha de envío de la carta que
informa al cliente sobre el inminente cargo en su cuenta, cantidad en pesetas y fecha de
vencimiento) y sobre los ingresos (fecha, cantidad y método de pago).
Para ver cómo se realiza el paso del diagrama a la implementación, vamos a profundizar en la
funcionalidad que dice que deberá ser posible conocer el saldo de cada una de las cuentas de los
Msc. Walter Fernandez Toglio.
21
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
clientes de la empresa, y realizar un listado de las cuentas del cliente que refleje la situación actual
de cada una.
class Cliente
{
char *nombre, *direccion, *telefono;
char *DNI;
int numCuentas;
Cuenta * misCuentas; //array de cuentas, debido a que no será normal
tener más de 2
public:
Cliente(char *, char *, char *, char *);
void ListarCuentas();
};
class ListaClientes: public Lista
{
long numClientes;
Cliente * primerCliente;
public:
ListaClientes();
Cliente* BuscarCliente(char *);
};
Cliente* ListaClientes::BuscarCliente(char *DNIBuscado)
{
Msc. Walter Fernandez Toglio.
22
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
// Operación que devuelve un puntero al cliente cuyo DNI coincide con
DNIBuscado.
// se trata de una sencilla búsqueda en una lista ordenada por DNI
}
void Cliente::ListarCuentas()
{
cout << nombre << “DNI: “ << DNI << endl;
for (int i=0;i<numCuentas;i++)
{
if (!misCuentas[i].Activa())
continue;
cout << “Cuenta número: “ << misCuentas[i].GetNumero() << endl;
cout << “Saldo: “ << misCuentas[i].ObtenerSaldo() << endl;
}
}
7 Se desea desarrollar un sistema de recogida de encuestas a través de Internet.
Cualquier persona desde su navegador puede inscribirse en el sistema a través de un formulario.
El formulario recoge los siguientes datos obligatorios del nuevo usuario: Apellidos y Nombre,
Nombre de usuario deseado para acceder al sistema, Dirección de correo electrónico, Temas en
los que está interesado (seleccionando uno o más de los que se le ofrecen).
Una vez validados los datos, el sistema le devuelve al usuario una palabra clave única, que le
permitirá acceder al sistema, junto con el nombre de usuario.
Periódicamente, el usuario recibirá mediante correo electrónico un cuestionario sobre uno de los
temas que seleccionó en su inscripción. Al recibirlo, deberá rellenarlo y devolverlo al sistema
también mediante el correo.
A partir de todos los cuestionarios recogidos sobre un tema, el sistema publicará unos resultados
estadísticos que podrán consultarse mediante una página Web.
Para contestar al cuestionario el usuario marcará una (y solo una) de las cuatro respuestas
propuestas a cada pregunta, pero en el futuro se permitirá también hacer preguntas de otros tipos,
como selección múltiple y preguntas abiertas, y debemos acomodar nuestro análisis a esta
circunstancia.
Hay que tener en cuenta que el sistema deberá realizar entre otras las siguientes funcionalidades:
 Consultas del número de usuarios que han contestado una determinada pregunta dentro de
una batería de encuestas concreta.
 Consultas del número de usuarios que han contestado alguna encuesta relacionada con un
determinado tema.
Msc. Walter Fernandez Toglio.
23
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
Para codificar la funcionalidad, por ejemplo, de las consultas del número de usuarios que han
respondido una determinada pregunta, suponemos que existe una pantalla de consultas donde el
usuario selecciona el texto de la pregunta de una lista desplegable.
A partir de ahí, se busca en la lista de contestaciones asociadas a dicha pregunta y de dicha
información se saca el número de encuestas en que aparece la contestación, que coincide con el
número de usuarios pues una encuesta la rellena una única persona:
class Encuesta
{
Fecha fechaRealizacion;
Cuestionario * cuestionario;
Contestacion * contestaciones; // será un array: el número de
contestaciones es fijo
public:
bool HaContestadoPregunta(char *);
};
class Contestacion
{
int numeroOrden;
Encuesta * encuesta;
Pregunta * pregunta;
public:
char * GetTextoPregunta(){ return pregunta.GetTexto();}
};
bool Encuesta::HaContestadoPregunta(char * textoPregunta)
{
for (int i=0;i<cuestionario.GetNumPreguntas();i++)
if (contestaciones[i].GetTextoPregunta() == textoPregunta)
return true;
return false;
}
NOTA: Llamo encuesta a la contestación de un cuestionario por parte del cliente, y contestación
a la respuesta a una pregunta por parte de un cliente.
Msc. Walter Fernandez Toglio.
24
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
P
P
R
O
G
R
A
M
A
C
Ó
N
E
N
C
C
N
V
E
A
V
A
N
Z
A
D
O
C
U
R
S
O
O
N
N
E
PR
RO
OG
GR
RA
AM
MA
AC
CIIIÓ
ÓN
NE
EN
NC
C///C
C++++++ N
NIIIV
VE
ELLL A
AV
VA
AN
NZ
ZA
AD
DO
O (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
Cuestionario es un conjunto de preguntas (sin respuesta) similar a un enunciado de un examen y
respues
Msc. Walter Fernandez Toglio.
25