Profundización en la implantación de Orientación a Objetos que ofrece C++:
Conocimientos necesarios
1. Convertir la clase del programa
anterior, que implementa
el Tipo Abstracto Pila, a una clase que utilice constructores y
destructores
cuando sea necesario.
2. Rellenar los huecos indicados como '...'
// herencia.cpp
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
//
Clase
rectángulo.
//
Lados x e y, área
x* y
/////////////////////////////////////////////////////////////////////////////////////////
class Rectangulo
{
...:
int
x,y;
...:
Rectangulo(int a = 0, int b = 0) : x( a ), y( b )
{};
int
calcularArea() { return ...*...; };
int
getX(void) { return ...;};
int
getY(void) { return ...;};
void
putX(int a) { x = ...; };
void
putY(int b) { y = ...; };
};
/////////////////////////////////////////////////////////////////////////////////////////
//
Clase
cuadrado.
//
Lados x e y, tal que x
== y. Así, usamos sólo x. Area x * x. y herencia privada
!!!
/////////////////////////////////////////////////////////////////////////////////////////
class Cuadrado : ...
Rectangulo
{
...
:
Cuadrado(int a = 0) { putX( a ); putY( 0 ); };
int calcularArea() { int a = ...; return a * a; };
...
using
Rectangulo::...;
};
using namespace std;
int main(void)
{
Cuadrado
c1 =
4;
cout
<< "El cuadrado de lado " << c1.getX()
<<
endl << "tiene área
" <<
c1.calcularArea();
}
3. Probar, si es necesario, las siguientes sentencias en el programa main() del ejemplo anterior. Indicar si compilan correctamente o no, y por qué lo hacen o no y como se corregirían en caso de que no lo hicieran. ¿Algún ejemplo compila pero no funciona adecuadamente ? ¿ Por qué ?
a)
c1.putY( 5 );
b) Rectangulo r1;
r1.putX(
10 );
r1.putY(
20 );
cout
<< ( r1.x * r1.y ) <<
endl;
c)
Cuadrado
c2( 20 );
cout
<< c2.calcularArea( 20, 20 ) << endl;
d) cout << "Área: " << c1.getX() * c1.getY() << endl;
e)
Rectangulo
* r2 = new Cuadrado( 20 );
cout
<< "Área: " <<
r2->calcularArea() <<
endl;
f)
rectangulo
* r3 = new Cuadrado( 6 );
cout
<< "Lado del cuadrado: " <<
r3->getX();
4. Codificar un programa que
defina la clase persona,
que encapsule los datos nombre y DNI. Defínase la clase
empleado,
heredando de persona y que encapsule a su vez el salario.
Utilizar la STL para guardar en
un vector objetos de tipo persona. Al guardar sólo punteros,
pueden
almacenarse punteros a persona que realmente apunten a objetos
empleado,
ya que el último hereda del primero.
Una vez guardadas 10 personas,
mostrar el nombre de éstas en pantalla.
A continuación, se muestran
ciertos trozos de código que realizan tareas clave con el
vector que
se provee en la STL.
#include <vector>
using namespace std;
...
int main()
{
// Declaraciones
vector<Persona *> gente;
Persona *x;
...
// Meter
empleados o personas en el vector, creciendo
dinámicamente.
x = new Empleado( "Pepe Pérez", 3456789, 120000 );
gente.push_back( x );
// Acceder
al número de elementos del vector
cout
<<
gente.size();
}