Si una función se declara no virtual en una clase derivada cuando la función de clase base era virutal, ¿por qué invoca una búsqueda vtable al invocar la función en su puntero? La función es clara desde el alcance.función virtual declarada no virtual en una clase derivada
Respuesta
En C++ si declara un método virtual
en la clase base, entonces también es virtual en clase derivada, incluso si se omite la palabra clave virtual
.
Sin embargo, para fines de documentación, en mi opinión, es bueno repetirlo de todos modos.
Cuando una clase hereda una función virtual, cualquier declaración nueva y anuladora de esa función se hará automáticamente virtual, incluso si la palabra clave virtual
no se utiliza.
La función sigue siendo virtual (suponiendo que tiene la misma firma o una firma covariante). Usar virtual
cuando la anulación es redundante.
No puede hacer que una función no sea virtual, por lo que se mantendrá virtual y una llamada a la función es en general también virtual. Por supuesto, hay situaciones en las que el compilador podrá optimizar esto y hacer una llamada directa, pero aparentemente no en su escenario.
Métodos virtuales creados para afectar en la clase derivada (Cuando marca un método como virtual. Utilizará vtable en las clases derivadas). Y los métodos anulados serán virtuales.
- 1. ++ C - "función miembro no declarada" en clase derivada
- 2. Clase derivada con destructor no virtual
- 3. ¿Una función virtual anula una función no virtual del mismo nombre en una clase base?
- 4. Usando 'virtual' en la clase derivada
- 5. C++: Llamar a la función virtual de la clase derivada
- 6. Averiguar si una propiedad es declarada virtual
- 7. función virtual const vs función virtual no const
- 8. Accediendo a un miembro/método de una clase derivada virtual
- 9. Formas de detectar si una función virtual C++ ha sido redefinida en una clase derivada
- 10. ¿Cuándo debería restringir el acceso a una función virtual en una clase derivada?
- 11. diferencia entre una función virtual y una función virtual pura
- 12. redefinir una función no virtual en C++
- 13. Tabla virtual C++
- 14. ¿Por qué se requiere un vptr cuando la clase derivada no anula la función virtual?
- 15. Sobrecarga de una función virtual en una clase secundaria
- 16. función virtual en línea
- 17. Templatized Función virtual
- 18. ¿Puede una clase base determinar si una clase derivada ha reemplazado a un miembro virtual?
- 19. En C++, ¿es una función automáticamente virtual si anula una función virtual?
- 20. Atributo condicional en una función virtual
- 21. clase de Padres C++ llamar a una función virtual niño
- 22. ¿Cómo se diferencia la sobrecarga de un método virtual de un método no virtual?
- 23. C++ virtual Const Función
- 24. Llamada de función virtual pura
- 25. ¿Cuál es el sentido de una función virtual pura privada?
- 26. Función virtual pura llamada error
- 27. Comportamiento de función virtual en C++
- 28. clase derivada Protegida
- 29. función virtual argumentos predeterminados comportamiento
- 30. ¿Dónde se encuentra la función virtual pura en C++?
Puede ser redundante para el compilador pero es una buena documentación para cualquier ser humano que use la clase. –
@LokiAstari: correcto. – PlasmaHH