Tengo problemas para entender el propósito de la palabra clave virtual
en C++. Sé C y Java muy bien, pero soy nuevo en C++Problemas para comprender C++ `virtual`
de Wikipedia
En la programación orientada a objetos, una función virtual o método virtual es una función o un método cuyo comportamiento puede se anulará dentro de una clase heredada por una función con la misma firma .
Sin embargo, puedo reemplazar un método como se verá más adelante sin utilizar la palabra clave virtual
#include <iostream>
using namespace std;
class A {
public:
int a();
};
int A::a() {
return 1;
}
class B : A {
public:
int a();
};
int B::a() {
return 2;
}
int main() {
B b;
cout << b.a() << endl;
return 0;
}
//output: 2
Como se puede ver a continuación, la función A :: a se anulados con éxito con B :: sin requerir un virtual
Para agravar mi confusión es esta declaración acerca de destructores virtuales, también de Wikipedia
como se ilustra en el siguiente ejemplo, , es importante que una clase base de C++ tenga un destructor virtual para asegurar que se llamará siempre al destructor de la clase derivada más.
¿Así que virtual
también le dice al compilador que llame a los destructores de los padres? Esto parece ser muy diferente de mi entendimiento original de virtual
como "hacer que la función reemplazable"
No hay necesidad de complicar el ejemplo con new/delete: 'B obj; A * p = &obj; 'o' A & ref = obj; ' –
Es cierto: de hecho omití la eliminación en mis primeras ediciones; pero la semántica de desreferenciación en C++ también es complicada ... ;-) – ConsultUtah