#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ó cảnh báo biên soạnCảnh báo 'có phương pháp ảo ... nhưng cảnh báo hủy không ảo' có nghĩa là gì trong quá trình biên dịch C++?
Class '[[email protected]' has virtual method 'area' but non-virtual destructor
Làm thế nào để hiểu được cảnh báo này và làm thế nào để cải thiện mã?
[EDIT] là phiên bản này đúng không? (Cố gắng trả lời để làm sáng tỏ bản thân mình với khái niệm này)
#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(){}
};
Có, phiên bản mới là chính xác. Mặc dù nó được coi là hình thức tốt để tái tuyên bố các chức năng trong các lớp dẫn xuất như ảo mặc dù nó không cần thiết. Điều này là để những người chỉ muốn nhìn vào lớp dẫn xuất vẫn biết các chức năng là ảo. – Omnifarious
Bạn có nghĩa là 'lớp CRectangle: public CPolygon { công khai: vùng int ảo() {return (width * height); } }; '? – qazwsx
Có. Và 'virtual ~ CRectangle() {}' là tốt. Như tôi đã nói, hãy nhớ rằng các chức năng này là ảo chỉ đơn giản là hình thức tốt, nó không được yêu cầu bởi ngôn ngữ theo bất kỳ cách nào. – Omnifarious