una resueltos que programacion poo orientada objetos miembros herencia ejercicios ejemplo derivada constructores codigo clases clase c++ interface

c++ - resueltos - ¿Es posible pasar clases derivadas por referencia a una función que toma la clase base como un parámetro?



miembros de una clase en programacion orientada a objetos (2)

Digamos que tenemos una clase base abstracta IBase con métodos virtuales puros (una interfaz).

Luego derivamos CFoo , CFoo2 de la clase base.

Y tenemos una función que sabe cómo trabajar con IBase.

Foo(IBase *input);

El escenario habitual en estos casos es el siguiente:

IBase *ptr = static_cast<IBase*>(new CFoo("abc")); Foo(ptr); delete ptr;

Pero es mejor evitar la gestión de punteros, así que, ¿hay una manera de usar referencias en tal escenario?

CFoo inst("abc"); Foo(inst);

donde Foo es:

Foo(IBase &input);


Puedes lanzar un objeto al igual que un puntero. Recuerdo que esto era común cuando se convertía char en char unsigned char y en varios otros signos de cambio de modelos en los días de antaño.


Sí. No tienes que subir tus objetos. Todas las referencias / punteros a tipos derivados se convierten implícitamente a referencias / punteros de objetos base cuando sea necesario.

Asi que:

IBase* ptr = new CFoo("abc"); // good CFoo* ptr2 = static_cast<CFoo*>(ptr); // good CFoo* ptr3 = ptr; // compile error CFoo instance("abc"); IBase& ref = instance; // good CFoo& ref2 = static_cast<CFoo&>(ref); // good CFoo& ref3 = ref; // compile error

Cuando tenga que dynamic_cast , puede considerar el uso de dynamic_cast , si sus tipos son polimórficos.