C/Visual C - ayuda con el constructor

   
Vista:

ayuda con el constructor

Publicado por Lenis  (1 intervención) el 25/06/2008 21:31:54
estoy haciendo elsiguiente ejercicio que vi en un material de c , pero estaba imcompleto le faltaba implementar el metodo pedirDatos(),este metodo no pasa correctamente los datos al constructor , se ejecuta pero cuando voy a ingresar los datos que son tipo cadena se sale ,, alguien que me ayude eeeeeeeeeeeeeeeeeeeee

class CFicha{
public:
char *pRef, *pTitulo;
public:
char *AsignarCadena(char *pref);
public:
CFicha(char *r=0, char *tit=0);
~CFicha(){
delete [] pRef;
delete [] pTitulo;
}

char getpRef(){
return *pRef;
}
void setPRef( char re){
*pRef = re;
}
char getPTitulo(){
return *pTitulo;
}
void setPTitulo( char ti){
*pTitulo = ti;
}

void VisualizarFicha();
};

CFicha::CFicha(char *pr, char *pt){
pRef = AsignarCadena(pr);
pTitulo = AsignarCadena(pt);
}
char *CFicha::AsignarCadena( char *pcad){
char *tmp;
if (pcad == NULL)
return NULL;
tmp = new char[strlen(pcad)+1];
strcpy(tmp,pcad);
return tmp;
}
void CFicha::VisualizarFicha(){
cout <<" Ref: " << pRef << endl;
cout <<" Titulo: "<<pTitulo<<endl;
}

class CFichaLibro : public CFicha {
protected:
char *pAutor, *pEditorial;
public:
CFichaLibro( char *pR=0, char *pT=0, char *pA=0, char *pE=0);
~CFichaLibro(){
delete [] pAutor;
delete [] pEditorial;
}
char getPAutor(){
return *pAutor;
}
void setPAutor( char a){
*pAutor = a;
}

char getPEditorial(){
return *pEditorial;
}
void setPEditorial( char e){
*pEditorial = e;
}

void VisualizarFicha();
};

CFichaLibro::CFichaLibro( char *pR, char *pT, char *pA, char *pE){
pAutor = AsignarCadena(pA); //autor
pEditorial = AsignarCadena(pE); //editorial
pRef = AsignarCadena(pR); //referencia (de clase base)
pTitulo = AsignarCadena(pT); //titulo
//puede utilizar la llamada al constructor de la clase base para
//asignar los datos
}
void CFichaLibro::VisualizarFicha(){
cout << "Libro:" << endl;
CFicha::VisualizarFicha(); //de clase base CFicha
cout << " Autor: " << pAutor << endl;
cout << " Editorial: " << pEditorial << endl;
}

class CFichaRevista: public CFicha{
protected:
int Anyo, NumRevista;
public:
CFichaRevista( char *pr=0, char *pt=0, int an=0,int numr=0);
void VisualizarFicha();
};

CFichaRevista::CFichaRevista( char *pr, char *pt, int an,int numr){
pRef = AsignarCadena(pr);
pTitulo = AsignarCadena(pt);
Anyo=an;
NumRevista=numr;
}

void CFichaRevista::VisualizarFicha(){
cout << "Revista:" << endl;
CFicha::VisualizarFicha(); //de clase base CFicha
cout << " Anio " << Anyo << endl;
cout << " Numero de Revista: " << NumRevista<< endl;
}

class CFichaVolumen: public CFichaLibro{
protected:
int NroVolumen;
public:
CFichaVolumen::CFichaVolumen();
CFichaVolumen::CFichaVolumen(int num, char*pR,char *pT, char *pA, char *pE);
void VisualizarFicha();
void PedirDatos();

int getPNroVolumen(){
return NroVolumen;
}
void setNroVolumen( int nro){
NroVolumen = nro;
}

};

void CFichaVolumen::VisualizarFicha(){
cout << "Volumen:" << endl;
CFichaLibro::VisualizarFicha(); //de clase base CFicha
cout << " Nro de Volumen " << NroVolumen << endl;

}
CFichaVolumen::CFichaVolumen(int num, char*pR,char *pT, char *pA, char *pE):CFichaLibro(pR,pT,pA,pE){
NroVolumen = num;

}
CFichaVolumen::CFichaVolumen(){

}
void CFichaVolumen::PedirDatos(){
int num;
char *pA,*pE,*pR, *pT;
cout << "Dar los datos del Volumen " << endl;
cout << "Numero de Vol " << endl;
cin >> num;
cout << "Numero de Vol " << num << endl;
cout << "Introduzca el Autor " << endl;
//cin.get(pA,30,' ');
cin >> pA;
pAutor = AsignarCadena(pA);
cout << "autor " << pAutor << endl;
cout << "Introduzca el Editorial " << endl;
//cin.get(pE,30,' ');
cin >> pE;
pEditorial = AsignarCadena(pE);
cout << "Editorial " << pEditorial << endl;
cout << "Introduzca el Refrencia " << endl;
//cin.get(pR,30,' ');
cin >> pR;
pRef = AsignarCadena(pR);
cout << "Referencia " << pRef << endl;
cout << "Introduzca Titulo " << endl;
//cin.get(pT,30,' ');
cin >> pT;
pTitulo = AsignarCadena(pT);
cout << "Referencia " << pTitulo << endl;
}
int main()
{
CFichaLibro lib1("1111","Visual C++","Ceballos","RAMA");
CFichaRevista rev1("1112","Programming C++",2000, 9);
CFichaVolumen vol1(1,"1113","C++","Bjarne","Addison");
CFichaVolumen vol2;
vol2.PedirDatos();
//visualizar todos los datos
lib1.VisualizarFicha();
rev1.VisualizarFicha();
vol1.VisualizarFicha();
vol2.VisualizarFicha();
getch();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayuda con el constructor

Publicado por Tom (481 intervenciones) el 26/06/2008 16:45:23
Estás intentando cargar una cadena de texto sobre un puntero al que no has asignado ninguna dirección de memoria (ni tamaño).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar