Back
Close

Manejo dinámico de memoria y Polimorfismo (Práctica 4)

camilocorreaUdeA
2,097 views
Previous: Polimorfismo Next: Ejercicios prácticos

Operador static_cast<>()

Este operador simplemente ejecuta una conversión explícita de un objeto desde una clase hacia otra. Solo es posible entre clases que estén relacionadas por herencia, es decir, se puede utilizar para hacer conversión de un objeto de clase base a una de sus clases derivadas ("downcasting") o bien para convertir un objeto de una clase derivada a su clase base ("upcasting"). En el caso de polimorfismo dinámico, cuando se usan métodos virtuales, es útil cuando se quiere hacer llamados a métodos a no-virtuales que fueron redefinidos en las clases derivadas. A esta operación en general se le conoce como "downcasting". Observe el siguiente ejemplo:

#include<iostream>
using namespace std;
class Base
{
public:
virtual void MetodoOne()
{
cout<<"Clase Base MetodoOne"<<endl;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

El operador static_cast también se puede utilizar para realizar la operación conocida como "upcasting" en la que un objeto de la clase derivada se convierte de manera explícita en un objeto del tipo de su clase base para poder ejecutar llamados directos a los métodos de la clase base y no a la redefinición en la clase derivada. Observe y ejecute el siguiente ejemplo:

#include<iostream>
using namespace std;
class Base
{
public:
virtual void MetodoOne()
{
cout<<"Clase Base MetodoOne"<<endl;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Desafortunadamente, cuando se usa static_cast el compilador no puede comprobar si la conversión que se está tratando de hacer es correcta, es decir si no se está haciendo entre clases incompatibles que tienen una clase base como ancestro en común. Para verificar y validar si se hace una conversión adecuada existe el operador dynamic_cast<>()

Operador dynamic_cast<>()

Este operador sirve para identificar si un puntero involucrado en un polimorfismo puede ser convertido a cierto tipo de clase (clases derivadas). Se usa particularmente cuando en una función se pasa como parámetro un objeto polimorfico, es decir, un parámetro formal del tipo de la clase base que conlleva a un parámetro real del tipo de una clase derivada. Esto tiene como objetivo hacer que las funciones y métodos puedan ser más genéricos y se pueda definir un solo método que trabaje con objetos de distinto tipo al mismo tiempo. El operador dynamic_cast<>() retorna un puntero si se comprueba que la conversión es correcta, de otro modo retorna un puntero a NULL. Observe y ejecute el siguiente ejemplo en el que se implementa una función polimorfica (genérica):

#include<iostream>
using namespace std;
class Base
{
public:
virtual void printHola(){cout<<"Hola Base"<<endl;}
};
class Derivada:public Base
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io
codingame x discord
Join the CodinGame community on Discord to chat about puzzle contributions, challenges, streams, blog articles - all that good stuff!
JOIN US ON DISCORD
Online Participants