[C con Clase] (sin asunto)

Programante programante en gmail.com
Vie Jul 20 15:33:58 CEST 2007


rodolfo rosso paz escribió:
> Hola a todos.
>
> Muchas gracias a Zelion y Programante por sus respuestas a mi último correo, 
> se entendió perfectamente.
>
> Ahora tengo otra duda sobre herencia
>
> Tengo una clase "cuadrilátero" que tiene los cuatro pares de puntos que lo 
> definen en el plano cartesiano.
>
> Tengo otra clase "trapezoide" que hereda de "cuadrilatero", pero que ademas 
> tiene una función "Paralelos()" que me devuelve True si dos lados son 
> paralelos entre si.
>
> Si escribo una clase llamada "Paralelogramo", que no hereda de la clase 
> "trapezoide", (porque un paralelogramo no es un trapezoide) sino que hereda 
> de la clase "cuadrilatero"
>
> ¿ Como hago para usar la función "Paralelos()", que pertenece a "Trapezoide" 
> ?, ya que aunque no me interese nada mas de la clase trapezoide, si me 
> interesa esa función.
>
> Como siempre gracias por adelantado y que Dios los bendiga.
>
> Rodolfo
Yo creo que lo adecuado sería mover Paralelos() a la clase cuadrilátero, 
posiblemente como protegida y usarla luego en ambas clases derivadas.
Existirían otras opciones, como hacer otra función intermedia que tome 
como parámetros un cuadrilátero o los puntos y sea llamada por ambas 
clases (podría pertenecer a trapezoide o incluso estar fuera). Por 
poder, es posible engañar al compilador para usar paralelos desde 
paralelogramo, suando static_cast<trapezoide*>(this)->Paralelos() (le 
hacemos creer que el paralelogramo es un trapezoide) pero es peligroso, 
ya que si Paralelos() no se limita a usar los campos comunes a 
paralelogramo y trapezoide (los de la clase base) empezarán a 
sobreescribirse datos que no deben con fallos extraños (hasta que 
recuerdes que hace cosas raras porque está engañado creyendo que es un 
trapezoide). Y para limitarte a la clase base, mejor que esté en ella 
desde el principio ;-)




Más información sobre la lista de distribución Cconclase