ventajas utilidad sobre sirve que para opiniones educacion distancia desventajas caracteristicas c++ constructor virtual-functions dynamic-binding

c++ - utilidad - Explicación de por qué un constructor no puede ser basado en el estudio virtual: corrija los errores si alguno



utilidad de la educacion virtual (0)

Hice un estudio para descubrir por qué un constructor no puede ser virtual. Estoy consolidando mi entendimiento aquí.

Primero explicaré qué es una función virtual y luego explicaré por qué un constructor no puede ser virtual en la primera explicación.

¿Qué es una virtual function ?

Una función virtual es una función o un método en la clase base que puede redefinirse o anularse en la clase derivada, mediante una función con la misma firma. En otras palabras, la función virtual permite tener una implementación personalizada del método de clase base en la clase derivada. Debe declararse con la palabra clave virtual . En el momento de la invocación de la función virtual, la decisión de elegir qué versión de la definición de función (en la clase base o en la clase derivada) se realiza en tiempo de ejecución, dependiendo del tipo del objeto invocado (enlace dinámico).

Cuando una función se declara virtual, le dice al compilador que el tipo de objeto que invocaría la función virtual debería determinarse solo durante el tiempo de ejecución. Luego, según el tipo de objeto, la llamada a la función debe vincularse a la definición de la función y debe invocarse la función apropiada.

¿Por qué un constructor no puede ser virtual?

Cuando una función se declara virtual, le dice al compilador que el tipo del objeto que invocaría la función debería determinarse solo durante el tiempo de ejecución, y luego invocar la versión apropiada de la función en función del tipo de objeto.

Si el constructor fuera declarado virtual, le diría al compilador qué tipo de objeto invocaría al constructor debería determinarse en tiempo de ejecución. Pero para construir un objeto, el tipo exacto de objeto debe conocerse en tiempo de compilación en lugar de en tiempo de ejecución. Esta es la razón por la cual un constructor no puede ser virtual.

Me gustaría que los miembros SO corrija los errores en ambas respuestas, si las hay. Creo que nos ayudaría a mí y a otros, si pudieras corregir las respuestas volviéndolas a escribir como tus respuestas, en lugar de simplemente señalar los errores.