Ver Mensaje Individual
  #7  
Antiguo 12-06-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Pues este tipo de conversión resulta peligroso. Se trata de una variante de conversión o cast por fuerza bruta, sin tener en cuanta si lo que convertimos es o no factible. Sería algo parecido a la conversión: *(Tipo*)(&Otrotipo)

Es decir puedo convertir un TEdit a un TComBobox por las buenas pero sólo sintácticamente, para que el compilador no proteste. La realidad es que obtendré un error en tiempo de ejecución en cuanto llame a una propiedad o función que no corresponda.

dynamic_cast y static_cast hacen la conversión de punteros, pero si realmente el tipo es erróneo (convertir TComboBox a TEdit, por ejemplo) entonces devuelven un puntero nulo.

Para usar reinterpret_cast o la clasica *(Tipo*)(&Otrotipo) debemos estar muy seguros de lo que hacemos, de lo contrario tendremos un grave error de punteros.

En este caso, creo que lo más adecuado es:
Código:
for (int i = 0; i < this->ComponentCount; i++) {
   TCheckBox* Check = dynamic_cast<TCheckBox*>(Components[i]);
   if(Check) Check->Checked = CheckBox1.Checked;
}
o, también:
Código:
for (int i = 0; i < this->ComponentCount; i++) {
   TCheckBox* Check = static_cast<TCheckBox*>(Components[i]);
   if(Check) Check->Checked = CheckBox1.Checked;
}
Mirad estas referencias: reinterpret_cast, dynamic_cast, static_cast.

Saludos.
Responder Con Cita