Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Palabras Clave Virtual y Override | Visión General del Polimorfismo
POO en C++
course content

Contenido del Curso

POO en C++

POO en C++

1. Fundamentos de la POO en C++
2. Constructores y Destructores
3. Visión General de la Encapsulación
4. Visión General de la Herencia
5. Visión General del Polimorfismo

book
Palabras Clave Virtual y Override

Palabra clave Virtual

La palabra clave virtual se utiliza antes de la declaración de un método en una class para resolver el problema mencionado anteriormente. Se emplea para métodos que son comunes entre todas las subclases pero requieren implementaciones distintas para cada una. Esencialmente, se parece a cualquier otra declaración de método, excepto que comienza con virtual.

Base.h

Base.h

copy
1234567
class Base { public: virtual void display() { std::cout << "Base class display() called" << std::endl; } };

Cuando una función se declara como virtual en una superclase, permite que sea sobrescrita en una subclase. Esto significa que la subclase puede proporcionar su propia implementación, la cual será invocada en lugar de la implementación original cuando la función se llame a través de un puntero o referencia a la superclase.

main.cpp

main.cpp

copy
123456789101112131415161718192021222324252627
#include <iostream> class Base { public: virtual void display() { std::cout << "Base display() called" << std::endl; } }; class Derived : public Base { public: void display() { std::cout << "Derived display() called" << std::endl; } }; int main() { Base* obj; Derived derived; obj = &derived; obj->display(); }
Note
Nota

Cuando se tiene un puntero a un objeto y se desea acceder a sus miembros a través del puntero, se utiliza el operador flecha (->).

Volviendo a la solución para el problema original con los botones, este método permite crear fácilmente una única función que reciba un puntero al padre Button como parámetro. En consecuencia, se puede invocar esta función pasando un SubmitButton, ResetButton o CancelButton, y se comportará como se espera.

main.cpp

main.cpp

copy
12345678910111213141516171819202122232425262728293031
#include <iostream> class Button { public: virtual void onClick() { std::cout << "Click" << std::endl; } }; class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } }; class ResetdButton : public Button { public: void onClick() { std::cout << "Reset" << std::endl; } }; class CancelButton : public Button { public: void onClick() { std::cout << "Cancel" << std::endl; } }; void user_clicked_button(Button& btn) { btn.onClick(); } int main() { UploadButton uploadButton; user_clicked_button(uploadButton); }
Note
Nota

Intenta crear objetos de diferentes subclases y pasarlos a la función.

La palabra clave Override

La palabra clave override se utiliza en una subclase para indicar explícitamente que una función miembro sobrescribe una función virtual de una superclase. Ayuda a detectar errores en tiempo de compilación si la firma de la función en la subclase no coincide con ninguna función virtual en la superclase.

main.cpp

main.cpp

copy
1234567891011121314
#include <iostream> class Button { public: virtual void handleClick() { std::cout << "Click" << std::endl; } }; class UploadButton : public Button { public: // marked override, but does not override void onClick() override { std::cout << "Upload" << std::endl; } }; int main() { }

Si hay un error, como un error tipográfico en la firma de la función o la superclase no tiene la función que intenta sobrescribir, el compilador generará un error, lo que ayuda a detectar posibles errores en tiempo de compilación. Esta característica es especialmente útil en entornos de trabajo en equipo grandes, donde el seguimiento de cambios como el cambio de nombre de métodos puede ser un desafío.

question mark

¿Cuál es el propósito principal de la palabra clave virtual?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 5. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

course content

Contenido del Curso

POO en C++

POO en C++

1. Fundamentos de la POO en C++
2. Constructores y Destructores
3. Visión General de la Encapsulación
4. Visión General de la Herencia
5. Visión General del Polimorfismo

book
Palabras Clave Virtual y Override

Palabra clave Virtual

La palabra clave virtual se utiliza antes de la declaración de un método en una class para resolver el problema mencionado anteriormente. Se emplea para métodos que son comunes entre todas las subclases pero requieren implementaciones distintas para cada una. Esencialmente, se parece a cualquier otra declaración de método, excepto que comienza con virtual.

Base.h

Base.h

copy
1234567
class Base { public: virtual void display() { std::cout << "Base class display() called" << std::endl; } };

Cuando una función se declara como virtual en una superclase, permite que sea sobrescrita en una subclase. Esto significa que la subclase puede proporcionar su propia implementación, la cual será invocada en lugar de la implementación original cuando la función se llame a través de un puntero o referencia a la superclase.

main.cpp

main.cpp

copy
123456789101112131415161718192021222324252627
#include <iostream> class Base { public: virtual void display() { std::cout << "Base display() called" << std::endl; } }; class Derived : public Base { public: void display() { std::cout << "Derived display() called" << std::endl; } }; int main() { Base* obj; Derived derived; obj = &derived; obj->display(); }
Note
Nota

Cuando se tiene un puntero a un objeto y se desea acceder a sus miembros a través del puntero, se utiliza el operador flecha (->).

Volviendo a la solución para el problema original con los botones, este método permite crear fácilmente una única función que reciba un puntero al padre Button como parámetro. En consecuencia, se puede invocar esta función pasando un SubmitButton, ResetButton o CancelButton, y se comportará como se espera.

main.cpp

main.cpp

copy
12345678910111213141516171819202122232425262728293031
#include <iostream> class Button { public: virtual void onClick() { std::cout << "Click" << std::endl; } }; class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } }; class ResetdButton : public Button { public: void onClick() { std::cout << "Reset" << std::endl; } }; class CancelButton : public Button { public: void onClick() { std::cout << "Cancel" << std::endl; } }; void user_clicked_button(Button& btn) { btn.onClick(); } int main() { UploadButton uploadButton; user_clicked_button(uploadButton); }
Note
Nota

Intenta crear objetos de diferentes subclases y pasarlos a la función.

La palabra clave Override

La palabra clave override se utiliza en una subclase para indicar explícitamente que una función miembro sobrescribe una función virtual de una superclase. Ayuda a detectar errores en tiempo de compilación si la firma de la función en la subclase no coincide con ninguna función virtual en la superclase.

main.cpp

main.cpp

copy
1234567891011121314
#include <iostream> class Button { public: virtual void handleClick() { std::cout << "Click" << std::endl; } }; class UploadButton : public Button { public: // marked override, but does not override void onClick() override { std::cout << "Upload" << std::endl; } }; int main() { }

Si hay un error, como un error tipográfico en la firma de la función o la superclase no tiene la función que intenta sobrescribir, el compilador generará un error, lo que ayuda a detectar posibles errores en tiempo de compilación. Esta característica es especialmente útil en entornos de trabajo en equipo grandes, donde el seguimiento de cambios como el cambio de nombre de métodos puede ser un desafío.

question mark

¿Cuál es el propósito principal de la palabra clave virtual?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 5. Capítulo 2
some-alt