Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Polimorfismo en C++
Programación I - 0416202
Polimorfismo
Contenido
libro c(3);
Objeto c
cout<<“\n\nObjeto c”;
Libro:
c.mostrar();
Autor:
Cantidad de ejemplares: 3
getch();
}
Polimorfismo
Sobrecarga de operadores
La sobrecarga de operadores es el proceso de cambiar el
significado de un operador para su uso con objetos de una
clase específica.
class trabajador{
char nombre[40];
int edad;
float sueldo;
public:
//Constructores
trabajador();
trabajador(char * n, int e, float s);
trabajador::trabajador(){ }
trabajador::trabajador(char * n, int e, float s){
strcpy(nombre,n);
edad=e;
sueldo=s;
}
trabajador trabajador::operator+ (trabajador obj){
trabajador obj_aux; sueldo, edad y nombre son
los atributos del objeto que
obj_aux.sueldo = sueldo + obj.sueldo;
invoca
obj_aux.edad = edad + obj.edad;
strcpy(obj_aux.nombre, strcat(nombre, obj.nombre));
return obj_aux;
}
void trabajador::mostrar(){
cout<<“\nNombre: ”<<nombre;
cout<<“\nEdad: ”<<edad;
cout<<“\nSueldo: ”<<sueldo;
}
Polimorfismo
Sobrecarga de operadores
void main(){
trabajador obj1(“Luis”, 36, 700);
trabajador obj2(“Ana”, 30, 900);
Objeto Objeto
que que
invoca Se envía
como
argumento
obj1.mostrar();
getch(); Nombre: LuisAna
} Edad: 66
Sueldo: 1600
Polimorfismo
Basado en Herencia
En POO, el polimorfismo permite que diferentes objetos
respondan de modo diferente al mismo mensaje (invocación
de método).
El polimorfismo adquiere su máxima potencia cuando se utiliza
en unión de la herencia.
El polimorfismo en C++ se ejecuta utilizando funciones
virtuales.
#include <iostream>
#include <cstring>
class Jugador{
char nombre[40];
char equipo[40] ;
float average;
public:
//Constructores
Jugador();
Jugador(char * n, char * e);
//Función virtual
virtual void calcular_average();
void Jugador::calcular_average(){
cout<<“\nCalcular_average de Jugador”<<endl;
}
void Bateador::calcular_average(){
float x;
x = (float) nro_hits / (nro_veces_bate – nro_boletos_recibidos) * 1000;
set_average(x);
cout<<“\nEl average del Bateador fue: ”<<x;
//Si necesita ejecutar calcular_average de la clase Padre (Jugador)
Jugador::calcular_average();
}
Polimorfismo
Basado en Herencia
void main(){
p=&a;
Calcular average de Jugador
p->calcular_average();
void main(){
vector[1]->calcular_average();
El average del Bateador fue: 404.762
Calcula average de Jugador
cin.get();
}
Polimorfismo
Clases abstractas
Una clase con funciones virtuales se hace abstracta al declarar
una o más de sus funciones virtuales como puras.
void main(){
Figura obj; //Error
Circulo obj;
obj.calcular_area(); El area es: 6.28
getch();
}
Polimorfismo
TypeID
La palabra clave typeid identifica un operador con el que
puede obtenerse el tipo de objetos y expresiones en tiempo de
ejecución.
typeid( expresion )
typeid( nombre-de-tipo )
typeid(Clase).name();
Base* pb[5] ;
pb[0]=new Base;
pb[1]=new Derived;
pb[2]=new Base;
pb[3]=new Derived;
pb[4]=new Derived;
for(int i=0;i<5;i++)
if(typeid( *pb[i] )==typeid(Derived))
cout <<"Objeto "<<i<<"= "<< typeid( *pb[i] ).name()
<< endl;
system("PAUSE");
delete []pb;
return 0;}
Polimorfismo
Números aleatorios
Para generar números aleatorios se utiliza la función rand(),
incluida en la librería <stdlib.h>.
int main(){
int iSecreto, iAdivino;
srand (time(NULL)); //Inicializa la semilla con tiempo actual