• Domingo 17 de Noviembre de 2024, 16:33

Autor Tema:  Funciones Inline Pueden Ser Virtuales?  (Leído 1436 veces)

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Funciones Inline Pueden Ser Virtuales?
« en: Viernes 23 de Enero de 2004, 14:19 »
0
Buenas a todos, pregunta directa:

¿Las funciones inline pueden ser virtuales? me explico con un código:

Código: Text
  1.  
  2. class A {
  3.    public:
  4.       virtual void f() { cout << "Bahhh" << endl; }
  5. };
  6.  
  7.  

La función f() inline puede ser calificada "virtual"???

Muchas gracias
Core Dumped
zirrus.es

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Funciones Inline Pueden Ser Virtuales?
« Respuesta #1 en: Viernes 23 de Enero de 2004, 19:49 »
0
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:
QliX=D! - From the top of Tsunami

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Funciones Inline Pueden Ser Virtuales?
« Respuesta #2 en: Viernes 23 de Enero de 2004, 19:58 »
0
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
  1.  
  2. class Poligono {
  3.         public:
  4.                 virtual void anadir_vertice() { cout << "AÑADIR VERTICE" << endl; }
  5. };
  6.  
  7. class Rectangulo: public Poligono {
  8.         public:
  9.                 void anadir_vertice() { cout << "NUEVO VERTICE" << endl; }
  10. };
  11.  
  12. int main() {
  13.         Poligono *p; Rectangulo *r; Poligono p1;
  14.  
  15.         r = new Rectangulo;
  16.         p = r;
  17.         p->anadir_vertice();
  18.         p1.anadir_vertice();
  19. }
  20.  

Su salida es:
Código: Text
  1.  
  2. NUEVO VERTICE
  3. AÑADIR VERTICE
  4.  
  5.  

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...
Core Dumped
zirrus.es

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Funciones Inline Pueden Ser Virtuales?
« Respuesta #3 en: Lunes 26 de Enero de 2004, 22:23 »
0
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!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Funciones Inline Pueden Ser Virtuales?
« Respuesta #4 en: Martes 27 de Enero de 2004, 16:00 »
0
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.
QliX=D! - From the top of Tsunami

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Funciones Inline Pueden Ser Virtuales?
« Respuesta #5 en: Miércoles 28 de Enero de 2004, 16:37 »
0
Ok, muchas gracias a los dos. Muy buenas explicaciones.

Gracias.

Nos vemos.
Core Dumped
zirrus.es