Programación General > C/C++
Funciones Inline Pueden Ser Virtuales?
CiRRuS:
Buenas a todos, pregunta directa:
¿Las funciones inline pueden ser virtuales? me explico con un código:
--- Código: Text --- class A { public: virtual void f() { cout << "Bahhh" << endl; }};
La función f() inline puede ser calificada "virtual"???
Muchas gracias
QliX=D!:
No por uqe las funciones virtuales se ligan dinamicamente en tiempo de ejecucion no durante la compilacion.
El las funciones inline se reemplazan por su contenido en tiempo de compilacion.
Por lo tanto son conceptos opuestos.
O sea... en resumen: NO. :hola: :comp:
CiRRuS:
Ok, muchas gracias, veo que teoricamente la cosa esta clara.
Curiosamente con el g++ de linux version 2.96 "parece" ser que sí es posible, por ejemplo el siguiente código funciona:
--- Código: Text --- class Poligono { public: virtual void anadir_vertice() { cout << "AÑADIR VERTICE" << endl; }}; class Rectangulo: public Poligono { public: void anadir_vertice() { cout << "NUEVO VERTICE" << endl; }}; int main() { Poligono *p; Rectangulo *r; Poligono p1; r = new Rectangulo; p = r; p->anadir_vertice(); p1.anadir_vertice();}
Su salida es:
--- Código: Text --- NUEVO VERTICEAÑADIR VERTICE
No se supone que anadir_vertice es "inline" en Poligono?
Son solo curiosidades...
Gracias de todas formas, toy aprendiendo C++
PD: Editado para cambiar la salida del programa...
Ruben3d:
Hola.
Puedes declarar métodos virtuales como inline ya que inline es una sugerencia para el compilador, es decir, no está obligado a hacer caso a la orden.
Por ejemplo, si en algún momento usas la dirección de memoria de la función el compilador no la tratará como inline. O bien, si el compilador detecta que el código de la función inline es considerablemente mayor que el que sería utilizado para realizar una auténtica llamada a una función también sería ignorada la declaración inline (esto depende de cómo se haya configurado la optimización del compilador).
Por esto, cuando declaras un método virtual como inline el compilador simplemente ignora la palabra inline.
Espero que esto te haya aclarado el comportamiento de tu compilador.
Un saludo.
Ruben3d
QliX=D!:
Compilar compila, o sea podes escribir cualquier idiotez en C++ que este sintacticamente correcto pero de ahí a que funcione es otra cosa.
Es como dice arriba, podes escribirlo, pero no funciona como vos queres que lo haga, entendes?.
slds.
Navegación
[#] Página Siguiente
Ir a la versión completa