[C con Clase] "Punteros" a clase

Davidson, Steven srd4121 en njit.edu
Mar Oct 23 18:53:30 CEST 2012


Hola Rafael,

2012/10/23 Rafael Arias Michel <rgam496 en gmail.com>:
>

[CORTE]

> Vemos que f es un puntero a función, que me da la libertad de elegir qué
> algoritmo usaré para calcular los valores a graficar.
>
> Del mismo modo, quería diseñar pA de tal modo que me permita elegir qué
> clase usar, siempre que sea A una generalización de esa clase.
>

Lo que describes es justamente el polimorfismo, que te ha sugerido
User. Debes crear una clase virtual que sirva de pariente para una
jerarquía de clases. Para usar esta generalización de clases, creamos
o bien punteros a objetos o bien referencias a ellos para comenzar el
polimorfismo. Internamente, se aplica este cambio de puntero para que
elija el conjunto de funciones del tipo correcto. Esto sería,

class A {...};
class B : public A {...};
class C : public A {...};
...
A objA;
B objB;
C objC;

A *ptr = &objA;
ptr->graficar();

ptr = &objB;
ptr->graficar();

ptr = &objC;
ptr->graficar();

Si no quieres usar polimorfismo, pero quieres hacer algo parecido,
quizá más al estilo C, entonces podrías "jugar" con los tipos de
punteros y realizar cástings. Por ejemplo,

struct A {...};
struct B { A obj; ...};
struct C { A obj; ...};
...
A objA;
B objB;
C objC;

A *ptr = &objA;
ptr->graficar();

ptr = (A *) &objB;
((B *)ptr)->graficar();

ptr = (A *) &objC;
((C *)ptr)->graficar();

Nuevamente, esto ya existe en C++ a través de la POO como la herencia
y más sofisticadamente con el polimorfismo.


Espero haber aclarado la duda.

Steven




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