La clase y subclase de los padres de una función virtual problema llamada a la función ordinaria

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í.

Supongo que te gusta

Origin www.cnblogs.com/lyqf/p/12515920.html
Recomendado
Clasificación