Beruflich Dokumente
Kultur Dokumente
Reporte gua N 4:
Clases en C++. Parte dos
Docente:
Ing. Walter Zelaya
Instructor:
Br. Daniel Jimnez
Alumnos:
Lpez Cuellar, Jonathan Misael LC16009
Mendoza Guardado, David Edgardo MG16014
Rivera Alfaro, Guillermo Mauricio RA16017
Segovia Rodas, Joel Alexander SR16001
Grupo de Laboratorio: 01
El puntero this es un puntero accesible solo dentro de las funciones miembro no estticas de
un tipo de clase, struct o de unin. Seala al objeto para el que se llama a la funcin miembro.
Las funciones miembro estticas no tienen un puntero this.
l puntero this de un objeto no forma parte del propio objeto; no se refleja en el resultado de
una instruccin sizeof en el objeto. En su lugar, cuando se llama a una funcin miembro no
esttica para un objeto, el compilador pasa la direccin del objeto como un argumento oculto
a la funcin.
OBJETIVOS
Generales.
Especficos.
La sobrecarga de operadores es uno de los mecanismos que nos permite ampliar las
capacidades de los lenguajes de programacin orientados a objetos. En C++, la declaracin y
definicin de una sobrecarga de operador es muy similar a la declaracin y definicin de una
funcin cualquiera. El ejemplo ms sencillo de una sobrecarga de operadores nos lo da el
lenguaje mismo, es decir, en una operacin aritmtica (por ejemplo, una suma ) el compilador
determina el tipo de operacin requerida de acuerdo con el tipo de datos involucrados. Vamos
a suponer que se tienen las variables: int A, B; double X, Y; int R; y las siguientes
instrucciones:
R = A + B;
R = A + X;
R = X + Y;
Ahora bien:
en el primer caso el compilador determina que el tipo de operacin requerida es una suma
de enteros debido a que los dos miembros ( A y B ) de la suma son del tipo entero.
en el segundo caso parece ser que las cosas no son tan claras, ya que en este los
miembros involucrados en la suma son de tipos diferentes, sin embargo el compilador
determinar el tipo de operacin requerida y depositar en el resultado ( R )el valor
resultante (no redondeado sino el inmediato anterior).
en el tercero y ltimo de los casos el compilador determina que el tipo de operacin
requerida es una suma de reales debido a que los dos miembros ( X e Y ) de la suma son
del tipo double. Tambin en este caso el resultado de la suma no se redondea sino que
pone el inmediato anteior.
Mi primera sobrecarga
Para poner un ejemplo prctico de sobrecarga del operador de suma ( + ) vamos a considerar
el caso de la clase pareja mostrada enseguida:
class Pareja {
public:
double a, b;
// constructor parametrizado
Pareja(const double a,const double b)
{
this->a = a;
this->b = b;
}
};
int main()
{
Pareja A(50, 75 );
Pareja B(150, 175 );
Pareja C = A + B;
return 0;
}
Si usted trata de compilar el programa anterior descubrir que el compilador se queja, es decir,
el compilador no sabe qu hacer en el caso de la instruccin Pareja C = A + B; aunque es
evidente que se trata de la declaracion del objeto C y que el mismo se espera que sea igual a
la suma de los objetos A y B. El error se debe al hecho de que el tipo Pareja es en realidad
una clase y no un tipo primitivo y, en consecuencia, se debe de adiestrar al compilador para
que ste sepa de qu manera har la suma de dos objetos del tipo Pareja. As, para solucionar
el error vamos a sobrecargar el operador + para trabajar la suma de dos de dichos objetos.
Veamos:
// constructor parametrizado
Pareja(const double a,const double b)
{
this->a = a;
this->b = b;
}
};
int main()
{
Pareja A(50, 75 );
Pareja B(150, 175 );
Pareja C = A + B;
cout << "A = " << A.a << ',' << A.b << "\n";
cout << "B = " << B.a << ',' << B.b << "\n";
cout << "C = " << C.a << ',' << C.b << "\n";
return 0;
}
Sintaxis general
en donde,
Nota: en el caso de que el operador sobrecargado se hace para una clase especfica la sintaxis
se extiende de la siguiente manera:
En C++ no es posible sobrecargar todos los operadores, pero al menos la mayora de ellos s.
Los operadores que no se pueden sobrecargar son: operadores de directivas de
procesador #, ## ; Selector directo de componente . ; operador para valores por defecto de
funciones de clase : ; Operador de acceso a mbito :: ; Operador de indireccin de puntero-a-
miembro .* ; Condicional ternario ?; sizeof y typeid.
Normalmente cuando se escribe una clase y se desea que el stream estndar de salida ( cout )
pueda mostrar una representacin de su valor se debe de sobrecargar el operador <<. Para
mostrar un ejemplo retomemos el programa sobrecarga01.cpp ( visto arriba ), en el mismo se
imprimen por medio de cout los miembros ( a y b ) de los objetos A, B y C.
cout << "A = " << A.a << ',' << A.b << "\n";
cout << "B = " << B.a << ',' << B.b << "\n";
cout << "C = " << C.a << ',' << C.b << "\n";
Usted puede ver cmo para cada uno de los miembros de los objetos se debe de usar el
operador de direccin ( . ), pues bien, nuestro objetivo es lograr que dado un objeto de la clase
Pareja ste pueda ser desplegado por cout y para ello haremos la sobrecarga de operador <<
con el fin de que pueda operar con objetos de la clase mencionada. Veamos:
class Pareja {
public:
double a, b;
// constructor parametrizado
Pareja(const double a,const double b)
{
this->a = a;
this->b = b;
}
};
return 0;
}
int main()
{
Pareja A(50, 75 );
Pareja B;
cin >> B;
Pareja C = A + B;
return 0;
}
Operadores amigos
Un operador amigo, al igual que una funcin amiga, es aquel que an cuando no es miembro
de una clase tiene todos los privilegios de acceso a los miembros de dicha clase.
En la sobrecarga de los operadores +, << y >> para la clase Pareja de los programas
anteriores, se puede notar que dichos operadores no son parte de la clase Pareja, sino que
ms bien stos operan sobre objetos de dicha clase y es a travs de dichos objetos que pueden
manipular a los miembros de la clase. Ahora bien, no hemos tenido ningn problema debido a
que todos los miembros de Pareja han sido declarados como pblicos (public:), pero qu
sucede si un operador o una funcin que no sea parte de la clase trata de acceder a los
miembros privados o protegidos de sta? En estos casos, el compilador reportara el error
indicando que tal o cual miembro es privado dentro de cierto contexto.
Si queremos que un operador o funcin que no es miembro de una clase pueda acceder a los
miembros pblicos, privados o protegidos deberemos declarar a dicho operador o funcin
como amigo (friend) dentro de la clase especfica. Para mostrar un ejemplo modificaremos la
clase Pareja, donde sus atributos sern privados.
private:
double a, b;
public:
// constructor parametrizado
Pareja(const double a,const double b)
{
this->a = a;
this->b = b;
}
int main()
{
Pareja A(50, 75 );
Pareja B(150, 175 );
Pareja C = A + B;
return 0;
}
PROCEDIMIENTO
Declaracin de la clase
Definicin de la clase
Programa principal
CONCLUSION
La creacin de clases implica crear de uno a tres archivos que contengan lo necesario
para que un programa cumpla las funciones necesarias que el programador requiere. En
estos se realizan las variables y funciones de nuevos tipos.
Al crear una clase, es decir nuevas funciones, la programacin puede llevar a cabo
actividades que sin ellas sera muy difcil o imposible de hacer. Por ejemplo, realizar
operaciones con nmeros complejos, vectores, matrices, entre otros.
Como hemos visto el punteros this es necesario para ejecutar un comando e realizar
una programacin ya que son puntos de inicio que da a corregir fallas y son puntos de
claves para hacer funcionar el dicho programa. Esto demuestra gran importancias se
puede decir que sin esto punteros el programa no funciona ya que no hay inicio y no hay
un comando que el vea para ejecutar as lo hemos visto y en podido entender todo eso
BIBLIOGRAFA
Libros:
Guion de clases PEL115
Laboratorio 4 de programacin I
Sitios de internet:
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Sobrecarga_
de_Operadores