destructores y herencia c++
Hola a todos, toy haciendo un programilla en c++ y m da un error aver si me podeis ayudar:
tengo la siguiente clase base:
//--------------------------------------------------//
#ifndef persona_H
#define persona_H
#include <stdio.h>
#include <string.h>
#include <iostream>
class persona
{
protected:
char* nombre;
char apellido[20];
int edad;
public:
persona();
virtual ~persona();
char* leerNombre();
char* leerAp();
int leerEdad();
void ponNombre(char* n);
void ponEdad(int e);
void ponApp(char* a);
virtual void imprimeVals();
};
//implementacion
#include "persona.h"
persona::persona()
{
nombre = new char(50);
}
persona::~persona()
{
std::cout << "destructor persona llamado" << std::endl;
delete nombre;
}
char* persona::leerNombre()
{
return nombre;
}
int persona::leerEdad()
{
return edad;
}
void persona::ponNombre(char* n)
{
this->nombre = n;
}
void persona::ponEdad(int e)
{
this->edad = e;
}
char* persona::leerAp()
{
return apellido;
}
void persona::ponApp(char *a)
{
strcpy(apellido, a);
}
void persona::imprimeVals()
{
std::cout << "hola" << std::endl;
}
#endif
de esta derivan dos clases
empleado
#ifndef empleado_H
#define empleado_H
#include "persona.h"
#include <iostream>
class empleado:public persona
{
public:
empleado();
~empleado();
void setSalario(float m);
float getSalario();
char* getDpto();
void setDpto(char* d);
void imprimeVals();
private:
char* dpto;
float salario;
};
#endif
//implmentacion
#include "empleado.h"
empleado::empleado()
{
dpto = new char(20);
salario = 0;
}
empleado::~empleado()
{
std::cout << "Destructor empleado llamado" << std::endl;
delete dpto;
}
void empleado::setSalario(float m)
{
this->salario = m;
}
float empleado::getSalario()
{
return salario;
}
char* empleado::getDpto()
{
return dpto;
}
void empleado::setDpto(char* d)
{
this->dpto = d;
}
void empleado::imprimeVals()
{
std::cout << "Machaquilla" << std::endl;
std::cout << "Nombre: "<< this->nombre << std::endl;
std::cout << "Edad: " << this->edad << std::endl;
std::cout << "Departamento " << this->dpto << std::endl;
std::cout << "Salario: " << this->salario << std::endl;
}
jefe:
#ifndef jefe_H
#define jefe_H
#include "persona.h"
#include <iostream>
class jefe:public persona
{
public:
jefe();
~jefe();
void setSalario(float m);
float getSalario();
char* getDpto();
void setDpto(char* d);
void imprimeVals();
private:
char* dpto;
float salario;
};
#endif
//implementacion
#include "jefe.h"
jefe::jefe()
{
dpto = new char(20);
salario = 0;
}
jefe::~jefe()
{
std::cout << "Destructor jefe llamado" << std::endl;
delete dpto;
}
void jefe::setSalario(float m)
{
this->salario = m;
}
float jefe::getSalario()
{
return salario;
}
char* jefe::getDpto()
{
return dpto;
}
void jefe::setDpto(char* d)
{
this->dpto = d;
}
void jefe::imprimeVals()
{
std::cout << "Jefazo" << std::endl;
std::cout << "Nombre: "<< this->nombre << std::endl;
std::cout << "Edad: " << this->edad << std::endl;
std::cout << "Departamento " << this->dpto << std::endl;
std::cout << "Salario: " << this->salario << std::endl;
}
el main:
#include <iostream>
#include <conio.h>
#include "empleado.h"
#include "jefe.h"
using namespace std;
int main()
{
char no[20];
char dep[15];
int age = 0;
float salario = 0;
persona* empi = new empleado();
persona* jefote = new jefe();
cout << "Introduce el nombre del empleado ";
cin >> no;
cout << endl << "Introduce su edad ";
cin >> age;
//cout << endl << "Introduce el departamento dnd curra ";
//cin >> dep;
//cout << endl << "Introduce su sueldo ";
//cin >> salario;
empi->ponNombre(no);
empi->ponEdad(age);
//empi->setDpto(dep);
//empi->setSalario(salario);
cout << "Introduce el nombre del jefe ";
cin >> no;
cout << endl << "Introduce su edad ";
cin >> age;
//cout << endl << "Introduce el departamento dnd curra ";
//cin >> dep;
//cout << endl << "Introduce su sueldo ";
//cin >> salario;
jefote->ponNombre(no);
jefote->ponEdad(age);
//jefote->setDpto(dep);
//jefote->setSalario(salario);
empi->imprimeVals();
jefote->imprimeVals();
delete empi;
delete jefote;
getch();
return 0;
}
el caso es que todo va sin problemas hasta ejecutar el ultimo delete ahi me da un error y el programa termina.
Alguna idea de dnd esta el problema??
Saludosss
tengo la siguiente clase base:
//--------------------------------------------------//
#ifndef persona_H
#define persona_H
#include <stdio.h>
#include <string.h>
#include <iostream>
class persona
{
protected:
char* nombre;
char apellido[20];
int edad;
public:
persona();
virtual ~persona();
char* leerNombre();
char* leerAp();
int leerEdad();
void ponNombre(char* n);
void ponEdad(int e);
void ponApp(char* a);
virtual void imprimeVals();
};
//implementacion
#include "persona.h"
persona::persona()
{
nombre = new char(50);
}
persona::~persona()
{
std::cout << "destructor persona llamado" << std::endl;
delete nombre;
}
char* persona::leerNombre()
{
return nombre;
}
int persona::leerEdad()
{
return edad;
}
void persona::ponNombre(char* n)
{
this->nombre = n;
}
void persona::ponEdad(int e)
{
this->edad = e;
}
char* persona::leerAp()
{
return apellido;
}
void persona::ponApp(char *a)
{
strcpy(apellido, a);
}
void persona::imprimeVals()
{
std::cout << "hola" << std::endl;
}
#endif
de esta derivan dos clases
empleado
#ifndef empleado_H
#define empleado_H
#include "persona.h"
#include <iostream>
class empleado:public persona
{
public:
empleado();
~empleado();
void setSalario(float m);
float getSalario();
char* getDpto();
void setDpto(char* d);
void imprimeVals();
private:
char* dpto;
float salario;
};
#endif
//implmentacion
#include "empleado.h"
empleado::empleado()
{
dpto = new char(20);
salario = 0;
}
empleado::~empleado()
{
std::cout << "Destructor empleado llamado" << std::endl;
delete dpto;
}
void empleado::setSalario(float m)
{
this->salario = m;
}
float empleado::getSalario()
{
return salario;
}
char* empleado::getDpto()
{
return dpto;
}
void empleado::setDpto(char* d)
{
this->dpto = d;
}
void empleado::imprimeVals()
{
std::cout << "Machaquilla" << std::endl;
std::cout << "Nombre: "<< this->nombre << std::endl;
std::cout << "Edad: " << this->edad << std::endl;
std::cout << "Departamento " << this->dpto << std::endl;
std::cout << "Salario: " << this->salario << std::endl;
}
jefe:
#ifndef jefe_H
#define jefe_H
#include "persona.h"
#include <iostream>
class jefe:public persona
{
public:
jefe();
~jefe();
void setSalario(float m);
float getSalario();
char* getDpto();
void setDpto(char* d);
void imprimeVals();
private:
char* dpto;
float salario;
};
#endif
//implementacion
#include "jefe.h"
jefe::jefe()
{
dpto = new char(20);
salario = 0;
}
jefe::~jefe()
{
std::cout << "Destructor jefe llamado" << std::endl;
delete dpto;
}
void jefe::setSalario(float m)
{
this->salario = m;
}
float jefe::getSalario()
{
return salario;
}
char* jefe::getDpto()
{
return dpto;
}
void jefe::setDpto(char* d)
{
this->dpto = d;
}
void jefe::imprimeVals()
{
std::cout << "Jefazo" << std::endl;
std::cout << "Nombre: "<< this->nombre << std::endl;
std::cout << "Edad: " << this->edad << std::endl;
std::cout << "Departamento " << this->dpto << std::endl;
std::cout << "Salario: " << this->salario << std::endl;
}
el main:
#include <iostream>
#include <conio.h>
#include "empleado.h"
#include "jefe.h"
using namespace std;
int main()
{
char no[20];
char dep[15];
int age = 0;
float salario = 0;
persona* empi = new empleado();
persona* jefote = new jefe();
cout << "Introduce el nombre del empleado ";
cin >> no;
cout << endl << "Introduce su edad ";
cin >> age;
//cout << endl << "Introduce el departamento dnd curra ";
//cin >> dep;
//cout << endl << "Introduce su sueldo ";
//cin >> salario;
empi->ponNombre(no);
empi->ponEdad(age);
//empi->setDpto(dep);
//empi->setSalario(salario);
cout << "Introduce el nombre del jefe ";
cin >> no;
cout << endl << "Introduce su edad ";
cin >> age;
//cout << endl << "Introduce el departamento dnd curra ";
//cin >> dep;
//cout << endl << "Introduce su sueldo ";
//cin >> salario;
jefote->ponNombre(no);
jefote->ponEdad(age);
//jefote->setDpto(dep);
//jefote->setSalario(salario);
empi->imprimeVals();
jefote->imprimeVals();
delete empi;
delete jefote;
getch();
return 0;
}
el caso es que todo va sin problemas hasta ejecutar el ultimo delete ahi me da un error y el programa termina.
Alguna idea de dnd esta el problema??
Saludosss