Professional Documents
Culture Documents
i
on Orientada
a Objetos en C++
Arreglos
numeros
0 1
letras
0 1 2 3 4
racionales
0 1 2 3 4 5 6 7
letras Ma r i a
0 1 2 3 4
nombre Ma r i a \0
0 1 2 3 4 5
racionales
0 1 2 3 4 5 6 7
Ejemplos
Leer 25 numeros e imprimir los que aparez
an mas de una vez.
for (i = 1; i < 24; i++) {
x = A[i℄;
for (j = i+ 1; j < 25; j++)
if (x == A[j℄)
repetido = 1;
if (repetido) {
out << x;
repetido = 0;
}
}
Restri
iones
No pueden ser devueltos
omo resultado de una fun
ion.
La asigna
ion entre arreglos no esta permitida, debe ha
erse elemento por
elemento.
typedef int Nums[4℄;
void Muestra (Nums x) { //Bien
out << x[0℄ << '\t' << x[1℄ << '\t' << x[2℄ << '\t' << x[3℄ << endl;
}
Nums AsignaCero() { //Mal
Nums r;
r[0℄ = r[1℄ = r[2℄ = r[3℄ = 0;
return r;
}
void main () {
int a[5℄ = {23, 45, -45, 87, 9};
int b[5℄;
b = a;
Muestra (a);
}
Arreglos de objetos
es equivalente a
Es de
ir, impl
itamente se llama al
onstru
tor que no tiene parametros. Sin
embargo, podramos llamar a otro
onstru
tor. Por ejemplo:
Ejemplo
Deni
ion Programa que juegue bla
kja
k (\21")
ontra el usuario. La maquina
es el repartidor. El objeto del juego es
onseguir que el valor de las
artas
sume 21 o lo mas
er
ano a 21. En este
aso el as vale 11, y las guras 10.
El juego empieza repartiendo dos
artas a
ada jugador in
luyendo la
asa.
Siempre debe haber una
arta \tapada".
El jugador va a
eptando
artas hasta a
er
arse e in
luso tener 21 puntos.
Despues la
asa toma
artas (una a la vez) hasta tener al menos 17 puntos.
Si el jugador tiene mas puntos que la
asa sin pasarse de 21 puntos gana.
Dise~no
Identi
a
ion de
lases.
{ Cartas. Des
ritas por un valor y un palo.
{ Baraja. Un
onjunto de
artas. Capaz de ini
ializarse en orden (jugar
on
baraja nueva).
{ Jugador. Con una mano. Capaz de ini
ializarse, mostrar y evaluar su
mano.
{ Repartidor. Controla la a
ion del juego. Tiene memoria del estado del
juego, ademas es tambien un jugador. Sus responsabilidades son: revolver
la baraja, repartir
artas, determinar el ganador de
ada mano, pagar o
obrar, darse
uenta que se a
abo la baraja, jugar.
Implementa
ion
De
lara
ion .
De
lara
ion de las
artas:
enum Palo {treboles, diamantes,
orazones, pi
as};
lass Carta{
publi
:
void Muestra();
int ObtenValor();
void PonValor(int);
Palo ObtenPalo();
void PonPalo(Palo);
private:
Palo p;
int valor;
};
publi
:
Baraja();
private:
int
artaEn
ima;
Carta
artas[52℄;
};
publi
:
Jugador();
private:
Carta mano[5℄;
int dinero;
int numCartas;
int ValorMano();
void MuestraMano();
};
swit
h (ObtenPalo()) {
ase treboles:
out << " de treboles"; break;
ase diamantes:
out << " de diamantes"; break;
ase
orazones:
out << " de
orazones"; break;
ase pi
as:
out << " de pi
as"; break;
};
out << '\n';
}
Jugador::Jugador() {
dinero = 10;
numCartas = 0;
}
int Jugador::ValorMano() {
int v;
int total = 0;
for (int i = 0; i < numCartas; i++) {
v = mano[i℄.ObtenValor();
if ( v == 1)
total += 11;
else if (v <= 10)
total += v;
else // if (v <= 13)
total += 10;
}
return (total);
}
Repartidor::Repartidor() {
Revuelve();
numCartas = 0;
}
void Repartidor::Juega() {
out << "\n\nJugando....\n\n";
do
{
ReparteMano();
DeterminaLaMejorMano();
}
while (!FinDeBaraja());
}
void Repartidor::Revuelve() {
int r;
Carta
;
unsigned int seed = unsigned(
lo
k()); //Fun
ion dependiente del
ompilado
srand(seed);
for (int i = 0; i < 3; i++) { // Revuelve 3 ve
es
for (int j = 0; j < 52; j++) {
r = rand() % 52;
= barajita.
artas[j℄;
barajita.
artas[j℄ = barajita.
artas[r℄;
barajita.
artas[r℄ =
;
}
}
barajita.
artaEn
ima = 0;
}
void Repartidor::ReparteMano() {
Ini
iaMano();
DaCartasAlJugador();
DaCartasAlRepartidor();
}
void Repartidor::DaCartasAlJugador() {
har ans;
do
{
out << "\nQuieres otra
arta? (S/N) ";
in >> ans;
ans = toupper(ans);
if (ans == 'S') {
DaUnaCartaAlJugador();
jugadorx.MuestraMano();
}
} while ((ans == 'S') && (jugadorx.ValorMano() < 21)
&& (jugadorx.numCartas <= 5));
}
void Repartidor::DeterminaLaMejorMano() {
int pVal = jugadorx.ValorMano();
int dVal = ValorMano(0);
asa.Juega();
asa.DeterminaResultados();
}