Los sitios de ensayo: un puntero a la clase padre de una instancia de objeto de una subclase, anulan las llamadas a métodos ordinarios, se llama al método de la clase padre. Cuando se invoca anulación subclase la función virtual llama al método subclase.
1 clase A 2 { 3 público : 4 void funcA () 5 { 6 printf ( " funcA llamados \ n " ); 7 } 8 virtual void FuncB () 9 { 10 printf ( " FuncB llama \ n " ); 11 } 12 }; 13 clase B: pública Un 14 { 15 pública : 16 de vacío funcA () 17 { 18 A :: funcA (); 19 printf ( " FuncAB llama \ n " ); 20 } 21 virtual void FuncB () 22 { 23 printf ( " FuncBB llamados \ n " ); 24 } 25 }; 26 void principal ( void ) 27 { 28 B b; 29 A * aa; 30 pa = & b; 31 A * PA2 = nuevo A; 32 PA-> func (); ( 3 ) 33 PA-> FuncB (); ( 4 ) 34 pa2-> func (); ( 5 ) 35 pa2-> FuncB (); 36 de borrado pA2; 37 }
Los resultados operativos:
FuncA llama FuncBB llama funcA llama FuncB llama
pa-> funcA (); (3) // PA = & b funcA dinámica de unión pero no virtual, por lo funcA Llamado
PA-> FuncB (); (4) // FuncB B, es un FuncB llamada de función virtual, llamado FuncBB
pa2-> funcA (); (5) // PA2 Una clase es un puntero, no se trata de la llamada de función virtual es una función de A, por lo funcA llama FuncB llamada
pa2-> FuncB ()
Una vez más, la subclase se anula la función virtual del modo de funcionamiento se une de forma dinámica, con independencia del tipo de los puntos de puntero clase padre a la instancia actual de la clase, la clase y la instancia de objetos sólo en sí.