#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); }
};
は、この警告を理解するためにどのようにして、コードを改善するために、どのようにコンパイル警告C++コンパイル中に '仮想メソッド...ただし非仮想デストラクタ'警告の意味は何ですか?
Class '[[email protected]' has virtual method 'area' but non-virtual destructor
ていますか?
[EDIT]は現在このバージョンが正しいですか?それはあなたが仮想メソッドを持つ基本クラスに仮想デストラクタを必要とする意味
#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(){}
};
はい、新しいバージョンが正しいです。派生クラスの関数を必要ではないにもかかわらず仮想として再宣言するのは良い形式と考えられますが、これは、派生クラスを見たいだけの人々は、関数が仮想であることをまだ知っているようにするためです。 – Omnifarious
あなたは 'class CRectangle:public CPolygon { public: virtual int area {return(width * height);}を意味します。 } }; '? – qazwsx
はい。そして 'virtual〜CRectangle(){}'も同様です。私が言ったように、これらの機能がバーチャルであることを再現することは、単なる良い形であり、言語によっては決して要求されません。 – Omnifarious