HERENCIA TCuenta - int numCuenta - string nomCliente - double saldo - double tipoInteres + TCuenta() + void setNumCuenta(int num) + void setNomCliente(string nom) + void setSaldo(double sal) + void setTipoInteres( double vint) + int getNumCuenta() + string getNomCliente() + double getSaldo() + double getTipoInteres() + virtual double intereses() = 0 + ~TCuenta() TCuentaAhorros - double cuotaMantenimiento + TCuentaAhorros() + void setCuotaMantenimiento(double cuota) + double getCuotaMantenimiento() + virtual double intereses() + double saldoNeto() + ~TCuentaAhorros() TCuentaCorriente - int numTransacciones - double importeTransaccion + TCuentaCorriente() + void setNumTransacciones(int num) + void setImporteTransaccion(double importe) + int getNumTransacciones() + double getImporteTransaccion() + double cobroTransaccion() + virtual double intereses() + double saldoNeto(); + ~TCuentaCorriente(); Fichero tcuenta.h #ifndef TCUENTA_H #define TCUENTA_H #include <iostream> using namespace std; class TCuenta { private: int numCuenta; string nomCliente; double saldo; double tipoInteres; public: TCuenta(); //Declaración de los métodos modificadores de la clase. void setNumCuenta(int num); void setNomCliente(string nom); void setSaldo(double sal); void setTipoInteres( double vint); //Declaración de los métodos selectores de la clase. int getNumCuenta(); string getNomCliente(); double getSaldo(); double getTipoInteres(); //0 significa que es un método abstracto, así de declara un método virtual puro. El método abstracto //intereses(), No tiene una implementación definida en la clase TCuenta pero si debe estar implementado //en las clases hijas que hereden de ella. virtual double intereses()=0; ~TCuenta(); }; Fichero tcuenta.cpp #include "tcuenta.h" TCuenta::TCuenta() { numCuenta=0; nomCliente=""; saldo=0; tipoInteres=0; } void TCuenta::setNumCuenta(int num){ numCuenta=num; } void TCuenta::setNomCliente(string nom){ nomCliente=nom; } void TCuenta::setSaldo(double sal){ saldo=sal; } void TCuenta::setTipoInteres( double vint){ tipoInteres=vint; } int TCuenta::getNumCuenta(){ return numCuenta; } string TCuenta::getNomCliente(){ return nomCliente; } double TCuenta::getSaldo(){ return saldo; } double TCuenta::getTipoInteres(){ return tipoInteres; } TCuenta::~TCuenta(){ //dtor } fichero tcuentaahorros.h #ifndef TCUENTAAHORROS_H #define TCUENTAAHORROS_H #include "tcuenta.h" class TCuentaAhorros : public TCuenta //Así se define que la clase TCuentaAhorros es una clase hija de //la clase TCuenta, es decir TCuentaAhorros hereda todos los métodos y atributos definidos en la clase //padre TCuenta. { private: double cuotaMantenimiento; public: TCuentaAhorros(); void setCuotaMantenimiento(double cuota); double getCuotaMantenimiento(); //Se declara el método abstracto intereses() que se definió en la clase padre TCuenta, para que tenga su //implementación en la clase hija TCuentaAhorros. virtual double intereses(); //Método que calcula el interés mensual producido por la cuenta de ahorro. double saldoNeto(); //Definición del método que calcula el saldo neto de la cuenta de ahorro. ~TCuentaAhorros(); }; fichero tcuentaahorros.cpp #include "tcuentaahorros.h" TCuentaAhorros::TCuentaAhorros() { cuotaMantenimiento = 0; } void TCuentaAhorros::setCuotaMantenimiento(double cuota){ cuotaMantenimiento = cuota; } double TCuentaAhorros::getCuotaMantenimiento(){ return cuotaMantenimiento; } double TCuentaAhorros::intereses(){ return (getSaldo()*getTipoInteres())/100; } double TCuentaAhorros::saldoNeto(){ return (getSaldo() - getCuotaMantenimiento() + intereses()); } TCuentaAhorros::~TCuentaAhorros() { //dtor } fichero tcuentacorriente.h #ifndef TCUENTACORRIENTE_H #define TCUENTACORRIENTE_H #include "tcuenta.h" class TCuentaCorriente : public TCuenta { private: int numTransacciones; //Número de transacciones efectuadas sobre una cuenta. double importeTransaccion; //Importe que el banco cobra por cada transacción. public: TCuentaCorriente(); //Declaración de los métodos modificadores de la clase. void setNumTransacciones(int num); void setImporteTransaccion(double importe); //Declaración de los métodos selectores de la clase. int getNumTransacciones(); double getImporteTransaccion(); //Declaración del método que calcula la cantidad que cobra el banco mensualmente por el número de //transacciones, teniendo en cuenta el importe que cobra el banco. double cobroTransaccion(); //Declaración del método que calcula los intereses de la cuenta corriente, según las políticas establecidas //en el banco, si el saldo es mayor a 500000 se pagara el interés al 5%, pero si es menor a esta cantidad //se pagara según el interés establecido. virtual double intereses(); //Definición del método que calcula el saldo neto de la cuenta corriente. double saldoNeto(); ~TCuentaCorriente(); }; fichero tcuentacorriente.cpp #include "tcuentacorriente.h" TCuentaCorriente::TCuentaCorriente() { numTransacciones = 0; importeTransaccion = 0; } void TCuentaCorriente::setNumTransacciones(int num){ numTransacciones = num; } void TCuentaCorriente::setImporteTransaccion(double importe){ importeTransaccion = importe; } int TCuentaCorriente::getNumTransacciones(){ return numTransacciones; } double TCuentaCorriente::getImporteTransaccion(){ return importeTransaccion; } double TCuentaCorriente::cobroTransaccion(){ return getNumTransacciones()*getImporteTransaccion(); } double TCuentaCorriente::intereses(){ if (getSaldo() >= 500000){ return getSaldo()*0.05; }else{ return (getSaldo()*getTipoInteres())/100; } } double TCuentaCorriente::saldoNeto(){ return getSaldo() - cobroTransaccion() + intereses(); } TCuentaCorriente::~TCuentaCorriente() { //dtor } fichero main.cpp #include <iostream> #include <stdlib.h> #include <sstream> #include "tcuentaahorros.h" #include "tcuentacorriente.h" using namespace std; int menu(){ int opcion = 0; cout << "______________________________________________________________________\n"; cout << "\n IMPLEMENTACION DE HERENCIA - OPCION DEL MENU \n"; cout << "______________________________________________________________________\n\n"; cout << "\n1. Datos de una Cuenta de Ahorros\n\n"; cout << "2. Datos de una Cuenta Corriente\n\n"; cout << "3. Salir\n"; cout << "______________________________________________________________________\n"; do{ cout << "\nSeleccione una opcion del 1 al 3: "; cin >> opcion; }while(opcion <= 0 || opcion > 3); return opcion; } void capturarDatos(TCuenta* cu){ int num_cuenta; string nombre_cli; double saldo_cuenta; double interes; cout << "No. de Cuenta: "; cin >> num_cuenta; cu->setNumCuenta(num_cuenta); cout << "Nombre del Cliente: "; do{ getline(cin,nombre_cli); }while(nombre_cli.length()==0 || nombre_cli.compare("\n")==0); cu->setNomCliente(nombre_cli); cout << "Saldo de la Cuenta: "; cin >> saldo_cuenta; cu->setSaldo(saldo_cuenta); cout << "Valor del Interes: "; cin >> interes; cu->setTipoInteres(interes); } int main() { int opc; TCuentaAhorros* ca = new TCuentaAhorros(); TCuentaCorriente* cc = new TCuentaCorriente(); do{ opc = menu(); switch(opc){ double cuota; int transacciones; double importe; case 1:system("cls"); cout << "______________________________________________________________________\n"; cout << "\n CUENTA DE AHORROS \n"; cout << "______________________________________________________________________\n\n"; capturarDatos(ca); cout << "Valor Cuota de Mantenimiento: "; cin >> cuota; ca->setCuotaMantenimiento(cuota); cout << "______________________________________________________________________\n\n"; cout << "Intereses producidos ----> " << ca->intereses() << "\n\n"; cout << "Saldo despues de descuentos ----> " << ca->saldoNeto() << "\n\n"; break; case 2:system("cls"); cout << "______________________________________________________________________\n"; cout << "\n CUENTA CORRIENTE \n"; cout << "______________________________________________________________________\n\n"; capturarDatos(cc); cout << "Numero de Transacciones: "; cin >> transacciones; cc->setNumTransacciones(transacciones); cout << "Valor importe por transaccion: "; cin >> importe; cc->setImporteTransaccion(importe); cout << "______________________________________________________________________\n\n"; cout << "Cobro por transacciones ----> " << cc->cobroTransaccion() << "\n\n"; cout << "Intereses producidos ----> " << cc->intereses() << "\n\n"; cout << "Saldo despues de descuentos ----> " << cc->saldoNeto() << "\n\n"; break; } }while(opc!=6); delete ca; delete cc; }