Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2008, 10:48
Avatar de calathea
calathea
 
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Información problema en clases c++

Tengo creada una clase a partir de la cual creo dos subclases en la funcion main del programa. Una de ellas la inicializo con determinados valores; para la otra, me los pide el programa por defecto (debido a la funcion constructora).

Lo que quiero realizar es copiar la subclase que tengo incializada en la otra.
Consigo que todos los datos se almacenen correctamente en la otra cadena, y prosigue el programa, pero una vez q prosigue el programa vuelve a sus antiguos valores (los introducidos por la funcion constructora). Esto lo he visto en el debugger.

Os paso los códigos:
(están realizados con Visual C++ 2008 Express Edition)
Muchas gracias de antemano! un saludo!


Archivo *.h de la clase
Código:
#pragma once

class cPersona
{
	private:
		int edad;
		float talla;
		char nombre [20];
	public:
		void setEdad (int e);
		int getEdad (void);
		void setAltura(float a);
		float getAltura(void);
		void setNombre(char n[20]);
		char* getNombre(void);
		cPersona ();
		cPersona (int e, float a, char n[20]);
		~cPersona ();
		void copia(class cPersona);
};
Archivo *.cpp de la clase
Código:
#include "cPersona.h"
#include <string.h>
#include <stdio.h>

void cPersona::setEdad (int e)
{
	edad = e;
}
int cPersona::getEdad (void)
{
	return edad;
}
void cPersona::setAltura(float a)
{
	talla = a;
}
float cPersona::getAltura(void)
{
	return talla;
}
void cPersona::setNombre(char n[20])
{
	strcpy_s(nombre, n);
}
char* cPersona::getNombre()
{
	return nombre;
}
cPersona::cPersona ()
{
	printf ("\nEscribe la edad:");
	scanf_s("%d",&edad);
	printf ("\nEscribe la altura:");
	scanf_s("%f",&talla);
	printf ("\nEscribe el nombre:");
	fflush (stdin);		gets_s(nombre);
}
cPersona::cPersona (int e, float a, char n[20])
{
	edad = e;
	talla = a;
	strcpy_s (nombre,n);
}
cPersona:: ~cPersona ()
{
	printf ("La persona %s se autodestruira inmediatamente.\n", nombre);
}

void cPersona:: copia (cPersona p)
{
	p.setEdad (edad);
	p.setAltura (talla);
	p.setNombre (nombre);
}
Función main del programa:
Código:
#include "cPersona.h"
#include <stdio.h>
int main (void)
{
	cPersona p;
	cPersona q(6, 7.6F, "Pedro");
	q.copia (p);
	printf (" La edad de %s es %d\n", p.getNombre(),p.getEdad());
	return 0;
}