Tecnología de Objetos - Práctica

4ª Práctica: Polimorfismo

    Inicio al polimorfismo en C++:

Bibliografía y links de la práctica

    (Stroustrup, B. 1991)
    (Ellis, M., Stroustrup, B. 1990)
    Iniciación rápida a C++

Texto de la práctica

Texto de la práctica

1. Encontrar los errores típicos en C++ en los siguientes programas. Los errores no se producen en tiempo de compilación, sino en el de ejecución. Indicar, además, por qué se producen los errores.

//////////////////////////////////////////////////// Fragmento 1
// Puede resultar en fallo de protección general

...

class S
{
    char *p;
    int n;
public:
    S(int k =0)
    {
        n = k;
        if (n)
            p = new char[n];
    };

    ~S() { delete[] p; };
};

int main()
{
    S s1;
    S s2;
    S s3;


    return 0;
}

//////////////////////////////////////////////////// Fragmento 2
/// Resulta en un fallo de protección general

#include <cstdio>
#include <cstring>

class S
{
    int n;
    char *s;
public:
    S(char *p) { n = strlen(p); s = p; };
    operator char*() const;
};

S::operator char*() const
{
    return s;
}

int main()
{
    S x( "abc" );

    S y( "klc" );

    y = x;

    std::strcpy( x.s, "def" );

    printf( "%s\n", (char *) x );

    printf( "%s\n", (char *) y );
    return 0;
}
 

////////////////////////////////////////
// 3er.Fragmento.¿ Cuál es el error ? //
////////////////////////////////////////

#include <iostream>

using namespace std;

int main()
{
    unsigned int i = 9;

    cout << "El bucle hará " << i+1 << " iteraciones" << endl;

    for (;i>=0;i--)
        cout << "Iteración " << i   << endl;
}
 

////////////////////////////////////////
// 4º Fragmento. ¿ Cuál es el error ? //
////////////////////////////////////////

#include <iostream>

using namespace std;

int main()
{
    unsigned int filas = 25, columnas = 80;

    if ( ( filas + columnas ) > -1 )
         cout << "Resultado positivo o 0" << endl;
    else cout << "Resultado negativo"     << endl;
}
 

2. Codificar un programa que defina las clases Punto, Circulo, Rectangulo, TriánguloRectangulo. El programa debe presentar un menú al usuario, para que elija entre un triángulo, un rectángulo o un círculo. Una vez que haya elegido, se calcula el área (debe hacerlo el mismo objeto) de la figura requerida. Escójase una implementación lo más correcta respecto a la orientacíon a objetos como sea posible.

3.  Respecto al siguiente código:

class A {
    public:
    int f() { return 1; };
};

class B {
    public:
    int f() { return 2; };
};

class C: public a, public b {
    public:
    int g() { return 3; };
};

int main()
{
    C x;

    int a = x.f();    // Error
}

    Compila el programa si es necesario. Describe lo que hace el programa. ¿ Por qué da el error ?. Recuerda el uso del operador de acceso, ::, clase::identificador, y resuelve el error.