Lab04 Clases en C parte dos
UES FIA EIE PEL115
1/10
Universidad de El Salvador
Facultad de Ingeniería y Arquitectura
Escuela de Ingeniería Eléctrica
PROGRAMACIÓN I
Guía de Laboratorio #4
Tema: Clases en C++. Parte Dos.
Profesor:
Ing. Walter Zelaya
wzelaya@ing.ues.edu.sv
ingwzelayapel115@yahoo.com
Instructor:
Ing. Carlos Osmín Pocasangre
cpocasangre@ing.ues.edu.sv
copocasangre@gmail.com
CICLO IIGuía. #4
UES FIA EIE PEL115
2/10
Introducción.
Esta guía es una continuación de la anterior, por lo que se está explotando el concepto de sobrecarga de operadores y se
utiliza por primera vez el puntero this.
Objetivo.
Que los/las estudiantes puedan sobrecargar los diferentes operadores y hacer uso eficiente del puntero this.
Marco teórico.
Sobrecarga de operadores
La sobrecarga deoperadores permite redefinir ciertos operadores, como "+" y "-", para usarlos con las clases que hemos
definido. Se llama sobrecarga de operadores porque estamos reutilizando el mismo operador con un número de usos
diferentes, y el compilador decide cómo usar ese operador dependiendo sobre qué opera.
La sobrecarga de operadores sólo se puede utilizar con clases, no se pueden redefinir los operadorespara los tipos simples
predefinidos.
Los siguientes operadores no pueden ser sobrecargados:
•
•
•
El operador ternario ( ?: ) .
El operador de acceso a una clase o estructura ( . ) .
El operador scope ( :: ) .
Sobrecarga de operadores binarios
Veamos un ejemplo donde sobrecargamos el operador + para, a partir de dos cajas, crear otra de dimensiones igual a la
suma de las dimensiones de las cajasdadas:
1. #include
class Caja {
2.
double longitud;
3.
double anchura, altura;
4. public:
5.
void set(int l, int w, int h) {longitud = l; anchura = w; altura = h;}
6.
double volumen(void) {return longitud * anchura * altura;}
7.
Caja operator+(Caja a);
8. };
9. Caja operator+(Caja a)
10.{
11.Caja temp;
12.
temp.longitud = longitud + a.longitud;
13.
temp.anchura = anchura + a.anchura;14.
temp.altura = altura + a.altura;
15.
return temp;
16.}
17.main(){
18.Caja pequeña, mediana, grande;
19.Caja temp;
20.
pequeña.set(2, 4, 5);
21.
mediana.set(5, 6, 8);
22.
grande.set(8, 10, 12);
CICLO II
Guía. #4
23.
24.
25.
26.
27.
28.}
UES FIA EIE PEL115
cout
cout
cout
temp
cout
3/10
<< "El volumen es " << pequeña.volumen() << "\n";
<< "El volumen es " << mediana.volumen() <<"\n";
<< "El volumen es " << grande.volumen() << "\n";
= pequeña + mediana;
<< "El nuevo volumen es " << temp.volumen() << "\n";
El resultado de la ejecución será:
El
El
El
El
volumen
volumen
volumen
volumen
es
es
es
es
40.
240.
960.
840.
Observamos que :
•
•
•
El operador se llama desde la clase que precede al operador, y el objeto que le sigue es enviado como parámetro. Esto
significa que elparámetro (a) es mediana.
El operador puede acceder a los miembros privados del parámetro que es enviado. En el ejemplo, accede a a.longitud,
a.anchura, a.altura.
El anterior es un operador binario sobrecargado, porque tiene dos operandos, mientras que un operador unario sólo
tiene un operando. Ejemplos de operadores unitarios son ++ y --.
Operadores amigos
1. #include
2. class Caja{
3.
double longitud;
4.
double anchura, altura;
5. public:
6.
void set(int l, int w, int h) {longitud = l; anchura = w; altura = h;}
7.
int volumen(void) {return longitud * anchura * altura;}
8.
friend Caja operator+(Caja a, Caja b);
// Add two Cajas
9.
friend Caja operator+(int a, Caja b);
// Add a constant to a Caja
10.
friend Caja operator*(int a, Caja b);
// Multiply a Caja by a constant
11.};
12.Caja operator+(Caja a, Caja b){
13.Caja temp;
14.
temp.longitud = a.longitud + b.longitud;
15.
temp.anchura = a.anchura + b.anchura;
16.
temp.altura = a.altura + b.altura;
17.
return temp;
18.}
19.Caja operator+(int a, Caja b)
// Add a constant to a Caja
20.{
21.Caja temp;
22.
temp.longitud = a + b.longitud;
23.
temp.anchura = a + b.anchura;
24.
temp.altura = a + b.altura;
25.
return temp;...
Regístrate para leer el documento completo.