#include <iostream>
using namespace std;
class CPolygon {
protected:
int width, height;
public:
virtual int area()
{ return (0); }
};
class CRectangle: public CPolygon {
public:
int area() { return (width * height); }
};
Tiene la advertencia de compilación¿Qué significa la advertencia 'tiene el método virtual ... pero el destructor no virtual' durante la compilación de C++?
Class '[[email protected]' has virtual method 'area' but non-virtual destructor
¿Cómo entender esta advertencia y cómo mejorar el código?
[EDIT] ¿Esta versión es correcta ahora? (Tratando de dar respuesta a dilucidar a mí mismo con el concepto)
#include <iostream>
using namespace std;
class CPolygon {
protected:
int width, height;
public:
virtual ~CPolygon(){};
virtual int area()
{ return (0); }
};
class CRectangle: public CPolygon {
public:
int area() { return (width * height); }
~CRectangle(){}
};
Sí, la nueva versión es correcta. Aunque se considera buena forma para volver a declarar funciones en clases derivadas como virtuales, aunque no es necesario. Esto es para que las personas que solo quieren ver la clase derivada aún sepan que las funciones son virtuales. – Omnifarious
Quiere decir 'clase CRectangle: public CPolygon { public: virtual int area() {return (ancho * alto); } }; '? – qazwsx
Sí. Y 'virtual ~ CRectangle() {}' también. Como dije, repetir que estas funciones son virtuales es simplemente una buena forma, no es requerido por el lenguaje de ninguna manera. – Omnifarious