Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/04/2005, 10:50
MaxExtreme
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por custo
ops perdon, tienes razon! ^_^

tendria q hacer una clase abstracta pago y una subclase pagoenefectivo y pagocontarjeta para despues llamar una u otra en funcion de lo qe elija el cliente en el programa principal.

Gracias por tu ayuda! ;)

Bien :) Es sencillo. Supongo que un "pago" nunca debería realizarse sin un "medio" (sea dineo, sea tarjeta, sea gallina de los huevos de oro). Así que te la declaro pura (= no se puede crear instancias de esa clase a secas).

Código:
class pago
{
public:
    pago(float const cantidad) : Cantidad(cantidad);
    virtual ~pago() = 0;

private:
    float const Cantidad;

// ...
};


class pago_dinero : public pago
{
public:
    pago_dinero(float const cantidad) : pago(cantidad);
    ~pago_dinero();
// ...
};

class pago_tarjeta : public pago
{
public:
    pago_tarjeta(float const cantidad) : pago(cantidad);
    ~pago_tarjeta ();
// ...
};
A mi juicio creo que eso es lo que pretendes. En cualquier caso, con ese sistema tienes que dar a fin de cuentas un precio en los contructores... (sea de dinero o de tarjeta).

Puede usarlo así:

Código:
{
pago p0(5555); // Error de compilación, no puedes declarar un simple "pago"
pago_dinero p1(1000); // Pagas 1000 con dinero
pago_tarjeta p2(9999); // Me timan mucho más si llevo la visa
}
Ésto solo lo veo útil si quieres hacer diferencias, logs, otras acciones o pedir por ejemplo la ID de la tarjeta (así la pides en el constructor...) en las clases derivadas. Si no, a mi parecer debería ir en una clase más general como una función simple.