• Viernes 8 de Noviembre de 2024, 15:50

Autor Tema:  Herencia  (Leído 802 veces)

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Herencia
« en: Lunes 13 de Noviembre de 2006, 14:12 »
0
Tengo un problema con el siguiente codigo. Cuando creo los objetos de la clase empleados no puedo cargar bien el sueldo, en la salida me imprime cualquier cosa.

Código: Text
  1. #include<iostream>
  2. #include<conio.h>
  3. #include<string.h>
  4.  
  5.  
  6. class persona {
  7.   protected:
  8.     char apyn[31];
  9.     char dom[41];
  10.     int edad;
  11.   public:
  12.     persona();
  13.     persona(char *, char *, int);
  14.     ~persona();
  15.     friend istream& operator>>(istream&, persona&);
  16.     friend ostream& operator<<(ostream&, const persona&);
  17. };
  18.  
  19. class empleado:public persona {
  20.   protected:
  21.     float sueldo;
  22.   public:
  23.     empleado() {
  24.       sueldo = 0;
  25.     }
  26.  
  27.     empleado(float sueldo, char *apyn, char *dom, int edad):persona(apyn, dom, edad) {
  28.       this->sueldo = sueldo;
  29.     }
  30.  
  31.     friend istream& operator>>(istream&, empleado&);
  32.     friend ostream& operator<<(ostream&, const empleado&);
  33.  
  34.     void mostrar() {
  35.       cout << apyn << dom << edad << endl;
  36.     }
  37.  
  38.     ~empleado() {
  39.       cout << "Destructor de empleado.";
  40.       getch();
  41.     }
  42. };
  43.  
  44. class alumno: public empleado {
  45.   private:
  46.     int matap; float prom;
  47.   public:
  48.     alumno() {
  49.       matap = 0; prom = 0.0;
  50.     }
  51.     alumno(int matap, float prom, float sueldo, char *apyn, char *dom, int edad):empleado(sueldo,apyn,dom,edad) {
  52.       this->matap = matap; this->prom = prom;
  53.     }
  54.     ~alumno() {
  55.       cout << "Destructor de alumno";
  56.       getch();
  57.     }
  58.     friend istream& operator>>(istream&, alumno&);
  59.     friend ostream& operator<<(ostream&, const alumno&);
  60. };
  61.  
  62.  
  63. void main() {
  64.   persona p1, p3("Perez, Maria", "Puan 100, Capital", 22);
  65.   empleado e1, e2(1000.0, "Perez, Maria", "Puan 100, Capital", 22);
  66.  
  67.   cin >> p1;
  68.   cin >> e1;
  69.  
  70.   cout << endl << p1 << endl <<  p3 << endl;
  71.  
  72.   cout << e1 << endl << e2 << endl;
  73.  
  74.   cout << endl << "Presione una tecla para salir";
  75.   getch();
  76. }
  77.  
  78. /* DEFINICION CLASE PERSONA */
  79.  
  80. persona::persona() {
  81.   apyn[0] = '\0';
  82.   dom[0] = '\0';
  83.   edad = 0;
  84. }
  85.  
  86. persona::persona(char *a, char *b, int c) {
  87.   if(strlen(a) < 31) strcpy(this->apyn, a);
  88.   if(strlen(b) < 41) strcpy(this->dom, b);
  89.  
  90.   if(edad > 0) this->edad = c;
  91.   else this->edad = 0;
  92. }
  93.  
  94. persona::~persona() {
  95.   cout << endl << "Destructor de persona.";
  96.   getch();
  97. }
  98.  
  99. istream& operator>>(istream &e, persona &p) {
  100.  
  101.   cout << "Apellido y nombre:";
  102.   e.get(p.apyn, 31);
  103.   e.ignore(100, '\n');
  104.  
  105.   cout << "Domicilio:";
  106.   e.get(p.dom, 41);
  107.   e.ignore(100, '\n');
  108.  
  109.   cout << "Edad:";
  110.   e >> p.edad;
  111.   e.ignore(100, '\n');
  112.  
  113.   return e;
  114. }
  115.  
  116. ostream& operator<<(ostream &s, const persona &p) {
  117.   s << "Nombre:" << p.apyn << endl;
  118.   s << "Domicilio:" << p.dom << endl;
  119.   s << "Edad:" << p.edad << endl;
  120.  
  121.   return s;
  122. }
  123.  
  124. /* DEFINICION CLASE PERSONA */
  125.  
  126. /* DEFINICION CLASE EMPLEADO */
  127.  
  128. istream& operator>>(istream &e, empleado &p) {
  129.   e >> (persona &) p;
  130.  
  131.   cout << "Sueldo:";
  132.  
  133.   e >> p.sueldo;
  134.   e.ignore(100, '\n');
  135.  
  136.   return e;
  137. }
  138.  
  139. ostream& operator<<(ostream &s, const empleado &p) {
  140.  
  141.   s << (persona &)p;
  142.   s.precision(2);
  143.   s << "Sueldo:" << p.sueldo << endl;
  144.  
  145.   return s;
  146. }
  147.  
  148. /* DEFINICION CLASE EMPLEADO */
  149.  
  150. /* DEFINICION CLASE ALUMNO */
  151.  
  152. istream& operator>>(istream &e, alumno &p) {
  153.   e >> (empleado &) p;
  154.   cout << "Materias aprobadas y promedio:";
  155.   e >> p.matap >> p.prom;
  156.   e.ignore(100, '\n');
  157.  
  158.   return e;
  159. }
  160.  
  161. ostream& operator<<(ostream &s, const alumno &p) {
  162.   s << (empleado &) p;
  163.   s.precision(2);
  164.   s << p.matap << p.prom << endl;
  165.  
  166.   return s;
  167. }
  168.  
  169. /* DEFINICION CLASE ALUMNO */
  170.  
  171.  

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Herencia
« Respuesta #1 en: Lunes 13 de Noviembre de 2006, 14:15 »
0
ya lo pude solucionar. Gracias de todos modos. Tuve que sacar la linea.

Código: Text
  1.  s.precision(2);
  2.