Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/07/2013, 01:19
Terminator666
 
Fecha de Ingreso: octubre-2012
Mensajes: 14
Antigüedad: 11 años, 6 meses
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