clases abstractas
Publicado por Franco Cedillo (4 intervenciones) el 10/08/2005 00:57:19
Hola,
En esta oportunidad estoy trabajando con clases abstractas. en el cuerpo principal del programa he declarado dos variables
Persona *Pepito = new Empleado("Jose", 1000);
Persona *Pablito = new Estudiante("Pablo", 7.56);
La clase persona es la siguiente
class Persona {
public:
Persona(char *n) { strcpy(nombre, n); }
virtual void Mostrar() = 0;
protected:
char nombre[30];
};
vemos en ella que el método Mostrar es virtual
Las clases derivadas Estudiante y Empleado son las siguientes
class Empleado : public Persona {
public:
Empleado(char *n, int s) : Persona(n), salario(s) {}
void Mostrar() const;
int LeeSalario() const { return salario; }
void ModificaSalario(int s) { salario = s; }
protected:
int salario;
};
void Empleado::Mostrar() const {
cout << "Empleado: " << nombre
<< ", Salario: " << salario
<< endl;
}
class Estudiante : public Persona {
public:
Estudiante(char *n, float no) : Persona(n), nota(no) {}
void Mostrar() const;
float LeeNota() const { return nota; }
void ModificaNota(float no) { nota = no; }
protected:
float nota;
};
void Estudiante::Mostrar() {
cout << "Estudiante: " << nombre
<< ", Nota: " << nota << endl;
}
lo importante en ellas es que el método Mostrar tiene un comportamiento diferente al tener que imprimir en pantalla diferentes tipos de variables.
lo que sigue en el cuerpo principal del programa es esto
char n[30];
Pepito->Mostrar();
Pablito->Mostrar();
Ambas llamadas son ilegales en el debug en tiempo de compilación. El error está en la declaración del método virtual pero no sé como corregirlo. en el lenguaje Eiffel se solucionaba con colocar la palabra reservada virtual antes de los métodos.
Saludos.
. he estado viendo los drafts de c99 y el website de code project y estoy muy interesado en aprender C# luego de concluir con un nivel básico de C++, porque he visto mucho que se hereda de otros lenguajes que simplifican la programación. Por ejemplo el trabajo con strings se parece al de pascal que es más sencillo. Pero limitado.
En esta oportunidad estoy trabajando con clases abstractas. en el cuerpo principal del programa he declarado dos variables
Persona *Pepito = new Empleado("Jose", 1000);
Persona *Pablito = new Estudiante("Pablo", 7.56);
La clase persona es la siguiente
class Persona {
public:
Persona(char *n) { strcpy(nombre, n); }
virtual void Mostrar() = 0;
protected:
char nombre[30];
};
vemos en ella que el método Mostrar es virtual
Las clases derivadas Estudiante y Empleado son las siguientes
class Empleado : public Persona {
public:
Empleado(char *n, int s) : Persona(n), salario(s) {}
void Mostrar() const;
int LeeSalario() const { return salario; }
void ModificaSalario(int s) { salario = s; }
protected:
int salario;
};
void Empleado::Mostrar() const {
cout << "Empleado: " << nombre
<< ", Salario: " << salario
<< endl;
}
class Estudiante : public Persona {
public:
Estudiante(char *n, float no) : Persona(n), nota(no) {}
void Mostrar() const;
float LeeNota() const { return nota; }
void ModificaNota(float no) { nota = no; }
protected:
float nota;
};
void Estudiante::Mostrar() {
cout << "Estudiante: " << nombre
<< ", Nota: " << nota << endl;
}
lo importante en ellas es que el método Mostrar tiene un comportamiento diferente al tener que imprimir en pantalla diferentes tipos de variables.
lo que sigue en el cuerpo principal del programa es esto
char n[30];
Pepito->Mostrar();
Pablito->Mostrar();
Ambas llamadas son ilegales en el debug en tiempo de compilación. El error está en la declaración del método virtual pero no sé como corregirlo. en el lenguaje Eiffel se solucionaba con colocar la palabra reservada virtual antes de los métodos.
Saludos.
. he estado viendo los drafts de c99 y el website de code project y estoy muy interesado en aprender C# luego de concluir con un nivel básico de C++, porque he visto mucho que se hereda de otros lenguajes que simplifican la programación. Por ejemplo el trabajo con strings se parece al de pascal que es más sencillo. Pero limitado.
Valora esta pregunta
0