¿Qué es la conversión ascendente / descendente?

15

Cuando aprendes sobre el polimorfismo, comúnmente ves algo como esto

class Base { int prv_member; virtual void fn(){} }
class Derived : Base { int more_data;  virtual void fn(){} }

¿Qué es la conversión hacia arriba o hacia abajo? ¿Es (Derived*)base_ptr; un upcast o downcast?

Lo llamo upcast porque te vas a ir de la base a algo más específico. Otras personas me dijeron que está abatido porque está bajando una jerarquía hacia algo específico con la parte superior como la raíz. Pero otras personas parecen llamarlo lo que yo llamo.

Al convertir una base ptr en una ptr derivada, ¿se llama conversión ascendente o descendente? y si alguien puede enlazar a una fuente oficial o explicar por qué se llama así, genial.

    
pregunta 14.05.2012 - 22:26

3 respuestas

17
Is (Derived*)base_ptr; an upcast or downcast?

Es un proyecto abatido: consulte el artículo de Wikipedia sobre este tema.

  

En programación orientada a objetos , downcasting o refinamiento de tipo es el acto de casting una referencia de una clase base a una de sus clases derivadas.

     

En muchos lenguajes de programación, es posible verificar a través de RTTI si el tipo de objeto referenciado es de hecho uno se convierte en un tipo derivado o se deriva de él y, por lo tanto, emite un error si no es el caso.

     

En otras palabras, cuando una variable de la clase base ( clase padre ) tiene un valor derivado del clase ( clase secundaria ), es posible la reducción de nivel ...

    
respondido por el Robert Harvey 14.05.2012 - 22:47
8

En la mayoría de los idiomas (que yo sepa), las conversiones de generalización se realizan automáticamente. Por lo tanto, por lo general, si habla de un reparto dentro de una jerarquía, se refiere a un reparto especializado. En mi humilde opinión, la mayoría de las personas con el deseo de separar los dos tipos llaman a la baja especializada porque consideran que la jerarquía de herencia es un árbol. Y en ciencias de la computación se representa la raíz para estar en la parte superior. La razón detrás de esto es una convención o, más probablemente, un odio profundamente arraigado por los biólogos entre los informáticos. (Todos los juegos de palabras pretenden.)

EDITAR: Tal vez sea un odio muy arraigado.

    
respondido por el scarfridge 14.05.2012 - 22:59
2

Piense en la forma normal de dibujar un árbol con la "base" en la parte superior de la página y las hojas en la parte inferior. Si representa a su jerarquía de clases de esta manera, con la clase base en la parte superior y las hojas en algún lugar debajo, entonces la conversión ascendente y descendente se convierten en literales, algo que se mueve hacia arriba desde la hoja hacia la base es una mejora. El lanzamiento y algo que se mueve hacia abajo de la página desde la base hacia una hoja es un lanzamiento hacia abajo.

    
respondido por el Jerry Coffin 14.05.2012 - 23:00

Lea otras preguntas en las etiquetas

Comentarios Recientes

También conocido como infiltrados ocultos, traductores ocultos u operadores de servidores encubiertos. El problema con los infiltrados ocultos es que siempre han estado utilizando una conexión saliente hasta cierto punto. No pueden ocultarse físicamente o tener un original y rescate de donde proviene este caché en particular. Hey equipo (el equipo regresa ip, lado): así que durante nuestro ataque nuclear / puesta en escena nuestras muertes se han generado junto a todos los otros jugadores en su ballena, entonces... Lee mas