Inicio al polimorfismo en C++:
(Stroustrup, B. 1991)
(Ellis, M., Stroustrup, B.
1990)
Iniciación
rápida a C++
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.