Ya tengo el codigo casi acabado... solo me da un error y es que no me almacena el nombre completo del propietario, solo la primera letra.
Código
#include<iostream> #include<cstring> using namespace std; //Declaracion clase VEHICULO class vehiculo { protected: char *cad; int litros; int kphMas; int kphMenos; int veloActual; int capaDepo; int año; int capDepo; int liDepo; public: vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c); ~vehiculo(); void imprimir(); void llenarDepo(); void acelerar(int kphMas); void frenar(int kphMenos); char *leer(char *c); }; //Declaracion derivada MOTO class moto : public vehiculo { protected: int cilindrada; int cilinInicial; char *tipo; public: moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial, int cilinInicial, const char* c, const char *c1); ~moto(); char* leer1(char* c1); void imprimir(); }; //Declaracion derivada COCHE class coche : public vehiculo { protected: int asientos; int asientosInicial; char *marca; public: coche(int veloInicial,int liInicial, int capDepoInicial, int anioInicial, int cilinInicial, const char* c, const char *c1); ~coche(); char * leer1(char* c1); void imprimir(); }; //Constructor VEHICULO vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c) { veloActual = veloInicial; liDepo = liInicial; capDepo = capDepoInicial; año = anioInicial; cad = new char[strlen(c)+1]; strcpy(cad, c); } //Destructor VEHICULO vehiculo::~vehiculo() { delete [] cad; } //Metodo leer VEHICULO char *vehiculo::leer(char* c) { strcpy(c, cad); return c; } // Metodo llenar deposito VEHICULO void vehiculo::llenarDepo() { cout << "Estas llenando el deposito..." << endl; for(; liDepo < capDepo; liDepo++) { } cout << "El deposito esta lleno: " << liDepo<< " Litros."<< endl << endl; } // Metodo imprimir VEHICULO void vehiculo::imprimir() { cout << "La velocidad actual es: "<< veloActual << endl; cout << "El año del coche es: " << año << endl; cout << "En el deposito hay: " << liDepo << endl; cout << "El nombre del propietario es: " << cad <<endl << endl; } // Metodo acelerar VEHICULO void vehiculo::acelerar(int kphMas) { if(liDepo - kphMas / 10 > 0) { cout << "Estas acelerando!" << endl; veloActual = veloActual + kphMas; liDepo = liDepo - kphMas / 10; cout << "Su velocidad actual es: " << veloActual << endl; cout << "Su deposito actual es: " << liDepo << endl << endl; } else { cout << "El deposito esta vacio!" << endl << endl; veloActual = 0; } } // Metodo frenar VEHICULO void vehiculo::frenar(int kphMenos) { if( veloActual - kphMenos > 0) { cout << "Estas frenando!" << endl; veloActual = veloActual - kphMenos; cout << "Su velocidad actual es: " << veloActual << endl << endl; } else { veloActual = 0; cout << "Ya estas parado!" << endl << endl; } } // Constructor MOTO moto::moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial, int cilinInicial,const char* c, const char *c1): vehiculo( veloInicial, liInicial, capDepoInicial, anioInicial, c) { cout << "Ha salido la moto del taller!" << endl << endl; veloActual = veloInicial; liDepo = liInicial; capDepo = capDepoInicial; año = anioInicial; cilindrada = cilinInicial; cad = new char[strlen(c)+1]; strcpy(cad, c); tipo = new char[strlen(c1)+1]; strcpy(tipo, c1); } // Destructor Moto moto::~moto() { delete [] tipo; } // Metodo leer MOTO char *moto::leer1(char* c1) { strcpy(c1, tipo); return c1; } // Metodo imprimir MOTO void moto::imprimir() { cout << "La velocidad actual es: "<< veloActual << endl; cout << "El año del Moto es: " << año << endl; cout << "En el deposito hay: " << liDepo << endl; cout << "El nombre del propietario es: " << cad <<endl; cout << "La cilindrada de la moto es: " << cilindrada <<endl; cout << "El tipo de la moto es: " << tipo << endl << endl; } //Constructor COCHE coche::coche(int veloInicial,int liInicial, int capDepoInicial, int anioInicial, int asientosInicial,const char* c, const char *c1): vehiculo( veloInicial, liInicial, capDepoInicial, anioInicial, c) { cout << "Ha salido el coche del Parking!" << endl << endl; veloActual = veloInicial; liDepo = liInicial; capDepo = capDepoInicial; año = anioInicial; asientos = asientosInicial; cad = new char[strlen(c)+1]; strcpy(cad, c); marca = new char[strlen(c1)+1]; strcpy(marca, c1); } // Destructor COCHE coche::~coche() { delete [] marca; } // Metodo leer COCHE char *coche::leer1(char* c1) { strcpy(c1, marca); return c1; } // Metodo imprimir COCHE void coche::imprimir() { cout << "La velocidad actual es: "<< veloActual << endl; cout << "El año del Moto es: " << año << endl; cout << "En el deposito hay: " << liDepo << endl; cout << "El nombre del propietario es: " << cad <<endl; cout << "El coche tiene: " << asientos << " asientos" <<endl; cout << "La marca del coche es: " << marca << endl << endl; } int main() { coche ferrari(0, 90, 90, 2012, 2, "Jonathan Gavilan Mora", "Ferrari"); ferrari.acelerar(60); ferrari.acelerar(60); ferrari.acelerar(100); ferrari.acelerar(60); ferrari.acelerar(40); ferrari.frenar(100); ferrari.frenar(100); ferrari.frenar(120); ferrari.llenarDepo(); cout << "Datos actuales de Ferrari: " << endl; ferrari.imprimir(); moto honda(0, 50, 50, 2010, 1000, "Jonathan Gavilan Mora", "Carretera"); honda.acelerar(100); honda.acelerar(150); honda.acelerar(100); honda.frenar(200); honda.acelerar(100); honda.acelerar(100); honda.llenarDepo(); cout << "Datos atuales de Honda: " << endl; honda.imprimir(); system("pause"); return 0; }
Muchas gracias!
Edit: El problema estaba en la funcion imprimir() de coche y moto, estaban asi "*cad" y era asi "cad".