Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con herencia

Estas en el tema de Problema con herencia en el foro de C/C++ en Foros del Web. Por mas que quiero probar la inicialización de un estudiante usando herencia no me lo haceeee y no se en que está fallando!!! porque la ...
  #1 (permalink)  
Antiguo 31/07/2013, 01:19
 
Fecha de Ingreso: octubre-2012
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Problema con herencia

Por mas que quiero probar la inicialización de un estudiante usando herencia no me lo haceeee y no se en que está fallando!!! porque la asignación por medio de lectura del usuario si me la hace pero la inicialización no!! me deja los datos en blanco algo falla en los constructores ayuda!!!.

#include <iostream>
#include <string>
using namespace std;

class Direccion{
public:
Direccion(string ="",string ="", int =0,string ="");
Direccion(const Direccion& d);
Direccion& operator=(const Direccion& d);
~Direccion();
string calle()const;
string ciudad()const;
int codPostal()const;
string pais()const;
void calle(string c);
void ciudad(string c);
void codPostal(int c);
void pais(string p);
void leer();
void mostrar()const;
private:
string _calle;
string _ciudad;
int _codPostal;
string _pais;
};
class Persona{
public:
Persona(string ="",string ="",long int =0,Direccion =Direccion());
Persona(const Persona& p);
Persona& operator=(const Persona& p);
~Persona();
string nom()const;
string ape()const;
long int nif()const;
Direccion d()const;
void d(const Direccion& d);
void nom(string n);
void ape(string ape);
void nif(long int n);
void leer();
void mostrar()const;
private:
string _nom;
string _ape;
Direccion _d;
long int _nif;
};
class Estudiante:public Persona{
public:
Estudiante(string ="",string ="", Direccion =Direccion(),long int =0);
Estudiante(const Estudiante& e);
Estudiante& operator=(const Estudiante& e);
~Estudiante();
int id()const;
void mostrar()const;
private:
int _id;
static int _num;
};

//main------------------------------
int main(){
Direccion d;
d.leer();
Estudiante e("Miguel","Gomez",d,45345345);
e.mostrar();
system("pause");
return 0;
}
//Direccion--------------------------------------------------
Direccion::Direccion(string c,string ciudad,int cod,string pais){
_calle=c;
_ciudad=ciudad;
_codPostal=cod;
_pais=pais;
}
Direccion::Direccion(const Direccion& d){
_calle=d._calle;
_ciudad=d._ciudad;
_codPostal=d._codPostal;
_pais=d._pais;
}
Direccion& Direccion:: operator=(const Direccion& d){
_calle=d._calle;
_ciudad=d._ciudad;
_codPostal=d._codPostal;
_pais=d._pais;
return *this;
}

Direccion::~Direccion(){}
string Direccion:: calle()const{
return _calle;
}
string Direccion::ciudad()const{
return _ciudad;
}
int Direccion::codPostal()const{
return _codPostal;
}
string Direccion::pais()const{
return _pais;
}
void Direccion::calle(string c){
_calle=c;
}
void Direccion::ciudad(string c){
_ciudad=c;
}
void Direccion::codPostal(int c){
_codPostal=c;
}
void Direccion::pais(string p){
_pais=p;
}
void Direccion::leer(){
cin.sync();
cout<<"Calle "; getline(cin,_calle);
cin.sync();
cout<<"Ciudad: "; cin>>_ciudad;
cout<<"C.P: "; cin>>_codPostal;
cin.sync();
cout<<"Pais: "; cin>>_pais;
}
void Direccion::mostrar()const{
cout<<"Calle "<<_calle<<endl;
cin.sync();
cout<<"Ciudad: "<<_ciudad<<endl;
cout<<"C.P: "<<_codPostal<<endl;
cin.sync();
cout<<"Pais: "<<_pais<<endl;
}
//PERSONA--------------------------------------
Persona::Persona(string n,string ape,long int nif,Direccion d){
_nom=n;
_ape=ape;
_nif=nif;
_d=d;
}
Persona::Persona(const Persona& p){
_nom=p._nom;
_ape=p._ape;
_nif=p._nif;
_d=p._d;
}
Persona& Persona:: operator=(const Persona& p){
_nom=p._nom;
_ape=p._ape;
_nif=p._nif;
_d=p._d;
return *this;
}
Persona::~Persona(){}
string Persona:: nom()const{
return _nom;
}
string Persona::ape()const{
return _ape;
}
long int Persona:: nif()const{
return _nif;
}
Direccion Persona:: d()const{
return _d;
}
void Persona::d(const Direccion& d){
_d=d;
}
void Persona:: nom(string n){
_nom=n;
}
void Persona:: ape(string ape){
_ape=ape;
}
void Persona:: nif(long int n){
_nif=n;
}
void Persona::leer(){
cin.sync();
cout<<"Nombre: "; cin>>_nom;
cin.sync();
cout<<"Apellidos: "; getline(cin,_ape);
cout<<"Nif : "; cin>>_nif;
_d.leer();
}
void Persona:: mostrar()const{
cout<<"Nombre: "<<_nom<<endl;
cout<<"Apellidos: "<<_ape<<endl;
cout<<"Nif: "<<_nif<<endl;
_d.mostrar();
}
//estudiante----------------------------------------------
int Estudiante:: _num=100000;
Estudiante::Estudiante(string n,string a, Direccion d,long int nif){
_id=_num;
_num++;
Persona(n,a,nif,d);
}
Estudiante::Estudiante(const Estudiante& e){
_id=e._id;
Persona::operator=(e);
}
Estudiante& Estudiante:: operator=(const Estudiante& e){
_id=e._id;
Persona::operator=(e);
return *this;
}
Estudiante::~Estudiante(){}
int Estudiante:: id()const{
return _id;
}
void Estudiante:: mostrar()const{
cout<<"Id: "<<_id<<endl;
Persona::mostrar();
}

Es un ejemplo básico pero me está trayendo problemass
  #2 (permalink)  
Antiguo 31/07/2013, 05:26
 
Fecha de Ingreso: octubre-2012
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Problema con herencia

Vale ya está solucionado estoy tonto en el constructor de la subclase Estudiante para que funcione el constructor de la superclase debe ser llamado fuera de los paréntesis menuda idiotez que me ha llevado horasssssss.

O sea:

Estudiante::Estudiante(string n,string a, Direccion d,long int nif):Persona(n,a,nif,d){
_id=_num;
_num++;
}

uffff por fin.

Etiquetas: herencia, int, string, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:35.