Escolar Documentos
Profissional Documentos
Cultura Documentos
POO EN C++
ALCANCE DE CLASES EN C++
Fuera del alcance de una clase, los miembros de clase se referencian, ya sea
a través del nombre del objeto, una referencia a un objeto, o un apuntador a
un objeto.
POO EN C++
Declaración de Clases
class nombre-clase {
(private:)
métodos y atributos de la clase;
public:
métodos y atributos públicos de la clase;
}
Puede parecer extraño que un objeto que enlaza código y datos se pueda
contemplar como una variable; sin embargo, en C++, este es precisamente el
caso.
Cada vez que se define una nueva clase, se está creando un nuevo tipo de
dato, cada instancia específica de este tipo de dato es una variable
compuesta a la que llamamos objeto.
POO EN C++ class Persona
{
public:
Ejemplos de Declaración
void AsignaNombre(void);
de Clases void IngresaInfo(void);
void MuestraInfo(void);
class Menu void EliminaInfo(void);
{ void GuardaInfo (int registro);
public: void RecuperaInfo (int registro);
int EjecutaMenu(int registro); Persona(void);
Menu(void); ~Persona(void);
~Menu(void); private:
private: int Edad,Numero;
int accion, cualaccion; int CalculaEdad(int anio_nacimiento);
}; int CalculaEdad(string fecha_nacimiento);
int CalculaAnioActual(void);
char Nombre[50], Apellido[50], Calle[50], Colonia[50],
Ciudad[50], Estado[50];
string Nacimiento;
};
POO EN C++
Ejercicio:
En una clase, los datos y el código, o ambos, pueden ser privados para esa
clase o púbIicos.
C++ permite hacer esto mediante el uso de las declaraciones amigas (friend), la
sentencia friend se utiliza en clases o métodos para permitir que la clase
amiga acceda a los miembros privados.
Si una clase posee constructor este será ejecutado cuando se declare un objeto
de esa clase, si no se especifica un método constructor el compilador construye
uno por defecto que no ejecuta ninguna acción
POO EN C++
Constructores en C++:
Ejemplo de un constructor:
Persona::Persona(void)
{
char SinDato[6] = "Vacio";
estableceNombre(SinDato);
estableceApellido(SinDato);
Numero = 0;
strcpy(Calle,SinDato);
strcpy(Colonia,SinDato);
strcpy(Ciudad,SinDato);
strcpy(Estado,SinDato);
estableceDireccion(Calle,Numero,Colonia,Ciudad,Estado);
estableceEdad(0);
}
POO EN C++
Destructores en C++:
Tienen el mismo nombre que la clase que los contiene con el prefijo ~
Ejemplo de un destructor:
~Persona(void)
{
delete[] Nombre;
delete[] Apellido;
delete[] Calle;
delete[] Colonia;
delete[] Ciudad;
delete[] Estado;
}
Dado el siguiente programa genere una versión basada en objetos que tenga
una clase “Gato” que ejecute todas los métodos del juego
#include <stdio.h> void DibujaTablero()
#include <stdlib.h> {
system("cls");
char tablero[3][3];
printf("\n\n");
int InicializaTablero() printf(" %c | %c | %c\n", tablero[0][0], tablero[0][1], tablero[0][2]);
{ printf("---|---|---\n");
tablero[0][0] = '1'; printf(" %c | %c | %c\n", tablero[1][0], tablero[1][1], tablero[1][2]);
tablero[0][1] = '2'; printf("---|---|---\n");
tablero[0][2] = '3'; printf(" %c | %c | %c\n", tablero[2][0], tablero[2][1], tablero[2][2]);
tablero[1][0] = '4';
tablero[1][1] = '5'; }
tablero[1][2] = '6';
tablero[2][0] = '7';
tablero[2][1] = '8';
tablero[2][2] = '9';
return 0;
}
POO EN C++
void EjecutaTiro(int jugador, int renglon, int columna) else
{ fflush(stdout);
int tiro; if (tablero[renglon][columna] > '9')
char entrada; printf("Casilla ya ocupada");
}
do while(tiro < 0 || tiro > 9 || tablero[renglon][columna] > '9');
{
printf("\nJugador %d, haga su tiro, indique casilla de las %cs: ", tablero[renglon][columna] = (jugador == 1) ? 'X' : 'O';
jugador,(jugador==1)?'X':'O'); }
scanf(" %c", &entrada);
switch (entrada) { void CalculaGanador(int jugador, int *ganadorRef)
case '1': {tiro = 1; break;} {
case '2': {tiro = 2; break;} int linea;
case '3': {tiro = 3; break;}
case '4': {tiro = 4; break;} if((tablero[0][0]==tablero[1][1] && tablero[0][0]==tablero[2][2])
case '5': {tiro = 5; break;} || (tablero[0][2]==tablero[1][1] && tablero[0][2]==tablero[2][0]))
case '6': {tiro = 6; break;} *ganadorRef = jugador;
case '7': {tiro = 7; break;} else
case '8': {tiro = 8; break;} for(linea = 0; linea <=2; linea++)
case '9': {tiro = 9; break;} if((tablero[linea][0]==tablero[linea][1] &&
default: { tablero[linea][0]==tablero[linea][2])||
printf("\nNo es una casilla valida, repita el tiro: "); (tablero[0][linea]==tablero[1][linea] &&
tiro = -1; tablero[0][linea]==tablero[2][linea]))
} *ganadorRef = jugador;
} }
if (tiro != -1)
{
renglon = --tiro/3;
columna = tiro%3;
}
POO EN C++
void ImprimeGanador(int ganador)
{ DibujaTablero(tablero);
if(ganador==0) ImprimeGanador(ganador);
printf("Empate\n");
else printf("\nQuiere jugar de nuevo (s/n): ");
printf("El ganador es el jugador %d\n", ganador); ciclo = getche();
} system("cls");
}
int main() return 0;
{ }
char tablero[3][3];
int renglon = 0;
int columna = 0;
int ganador = 0;
int jugador = 0;
int indice;
char entrada, ciclo = 's';
jugador = indice % 2 + 1;
EjecutaTiro(jugador,renglon,columna);
CalculaGanador(jugador,&ganador);
}
POO EN C++
Herencia en C++:
La clase origen recibe el nombre de clase base, y la nueva clase que se obtiene
se denomina clase derivada.
POO EN C++
Herencia en C++:
Una clase derivada puede a su vez ser clase base a una segunda clase derivada,
generando lo que se conoce como jerarquía de clases. Normalmente las clases
base suelen ser más generales que las clases derivadas.
Ejemplo:
Persona
Empleado Empleador
Para declarar una clase derivada de una clase previamente definida se utiliza la
siguiente
sintaxis:
class Base
{
… // Declaración de atributos y métodos de la clase Base
};
En el caso de que la clase base sea public para la clase derivada, ésta heredara
los miembros public y protected de la clase base como miembros public y
protected, respectivamente.
Cuando la clase base es private para la clase derivada, ésta heredara todos los
datos de la clase base como private.
Ejemplo:
class Base
{ private:
// Miembros declarados en la sección privada: accesibles sólo para miembros de esta clase
protected:
/* Miembros declarados en la sección protegida: accesibles sólo para miembros de esta
clase y de sus derivadas */
public:
// Miembros declarados en la sección pública: accesibles para todos
};
POO EN C++
Herencia en C++:
Una clase puede heredar variables y funciones miembro de una o más clases
base. En el caso de que herede los miembros de una única clase se habla de
herencia simple y en el caso de que herede miembros de varias clases base se
trata de un caso de herencia múltiple.
Base 1 Base 2
Derivada
POO EN C++
Herencia en C++:
Ejercicio:
Es muy fácil sobrecargar una función: simplemente hay que declarar y definir
todas las versiones requeridas para un método.
Ejemplo
void NombreClase::ImprimirMensaje(void)
{
cout << "\n Esta es la función sin argumentos";
}
void NombreClase::ImprimeMensaje(char *texto)
{
cout << "\ n Esta es la función con argumentos y ha recibido el mensaje " << texto;
}
Si una clase base contiene una función declarada como virtual y una clase
derivada define la misma función. La función de la clase derivada se invoca
para los objetos de la clase derivada, aunque se llame mediante un puntero o
una referencia a la clase base.
class Cuenta {
public:
Cuenta( double d ) { balance = d; }
virtual double ObtieneBalance() { return balance; }
virtual void ImprimeBalance() { cerr << "Error. Balance no disponible." << endl; }
private:
double balance;
};
Ejercicio:
Ejemplo
POO EN C++
Ejemplo, considere la siguiente clase:
POO EN C++
Apuntadores a clases
Nótese que eliminamos a través del apuntador, nunca con una referencia al
objeto o a la clase
Ejemplo:
POO EN C++
Apuntadores a clases
class Persona
{
string Nombre, Apellido, Direccion;
int Edad;
public:
Persona(string lNombre, string lApellido, string lDireccion, int lEdad);
void MuestraDatosPersona(void);
};
void Persona::MuestraDatosPersona(void)
{
std::cout << "La persona es: " << Nombre << " " << Apellido << std::endl;
std::cout << "Que vive en: " << Direccion << std::endl;
std::cout << "Actu" << char(160) << "lmente tiene: " << Edad << " a" << char(164) << "os de edad" << std::endl;
};
POO EN C++
Ejemplo: Considere el siguiente código
class Alumno : public Persona
{
int Boleta;
public:
Alumno(string lNombre, string lApellido, string lDireccion, int lEdad, int lBoleta) : Persona(lNombre, lApellido, lDireccion, lEdad)
{
Boleta=lBoleta;
};
int MuestraBoleta(void);
};
int Alumno::MuestraBoleta(void)
{
std::cout << "La boleta del alumno es: " << Boleta << std::endl;
};
int main()
{
Persona *apPersona;
Alumno *apAlumno;
std::cout << "LA PRIMERA PARTE SE HACE CON LOS OBJETOS DIRECTAMENTE: " << std::endl << std::endl;
std::cout << "Los datos de la primer persona que no es alumno leidos directamente del objeto son: " << std::endl;
juan.MuestraDatosPersona();
std::cout << std::endl;
std::cout << "Los datos de la segunda persona que es alumno leidos directamente del objeto son: " << std::endl;
POO EN C++
Ejemplo: Considere el siguiente código
jose.MuestraDatosPersona();
jose.MuestraBoleta();
std::cout << "____________________________________________________________________________________" << std::endl;
std::cout << "LA SEGUNDA PARTE SE HACE A TRAVES DE LOS APUNTADORES: " << std::endl << std::endl;
apPersona=&juan;
apAlumno=&jose;
std::cout << "Los datos de la primer persona que no es alumno leidos mediante el apuntador son: " << std::endl;
apPersona->MuestraDatosPersona();
std::cout << std::endl;
std::cout << "Los datos de la segunda persona que es alumno leidos mediante el apuntador son: " << std::endl;
apPersona->MuestraDatosPersona();
apAlumno->MuestraBoleta();
std::cout << "____________________________________________________________________________________" << std::endl;
std::cout << "LA TERCERA PARTE SE HACE EN FORMA DINAMICA CREANDO OBJETOS A TRAVES DE LOS APUNTADORES: " << std::endl << std::endl;
apPersona=new Persona("Maria","Juarez","Independencia 25, Col. Centro",21);
apAlumno=new Alumno("Sandra","Gomez","Añil 73, 4to piso, Col. del Valle",19,17084726);
std::cout << "Los datos de la primer persona que no es alumno generados mediante el apuntador son: " << std::endl;
apPersona->MuestraDatosPersona();
std::cout << std::endl;
std::cout << "Los datos de la segunda persona que es alumno generados mediante el apuntador son: " << std::endl;
apPersona->MuestraDatosPersona();
apAlumno->MuestraBoleta();
std::cout << "____________________________________________________________________________________" << std::endl;
return 0;
}
POO EN C++
Apuntadores a clases
C++ nos brinda una clase de objetos “lista” a través de la librería list que nos
facilita la programación de las mismas
POO EN C++
Clase List
POO EN C++
do
{
apNodo = new Numero;
std::cout << endl << "Ingrese numero " << i << ": ";
std::cin >> Leido;
apNodo->IngresaDato(Leido);
Numeros.push_back(*apNodo);
i++;
Recorre = Numeros.begin();
while (Recorre != Numeros.end())
{
if (j%6 == 0)
std::cout << endl;
std::cout << "\tNo. " << j << ": " << Recorre->LeeDato();
Recorre++;
j++;
};
}
while(continua != 'N' && continua != 'n');
}
POO EN C++
Listas Dinámicas
Proyecto: