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.