Наследование и чисто виртуальная функция в с ++
Я не получаю желаемый результат с этой программой. Предупреждения, которые я получаю:
- Класс 'shape' имеет виртуальный метод 'shap', но не виртуальный деструктор.
- У lass 'square' есть виртуальный метод 'shap', но не виртуальный деструктор.
- Класс 'rectangle' имеет виртуальный метод 'shap', но не виртуальный деструктор.
Хотя программа компилируется без каких-либо ошибок, но я не получаю ответы, которые должны быть 20 и 18. Также я не могу понять значение этих предупреждений. И почему ответы не отображаются на экране? А также как я должен инициализировать значения длины и ширины, если я должен был сделать это через конструктор.
#include <iostream>
using namespace std;
class shape {
int length;
int breadth;
public:
int area;
virtual int shap(int, int) = 0;
};
class square : public shape {
public:
int shap(int length, int breadth) { return area = length * breadth; }
};
class rectangle : public shape {
public:
int shap(int length, int breadth) { return area = length * breadth; }
};
int main() {
shape* s;
square sq;
rectangle rect;
s = &sq;
s->shap(4, 5);
s = ▭
s->shap(6, 3);
return 0;
}
1 ответ
Решение
Я не получаю желаемый результат с этой программой. Предупреждения, которые я получаю:
Class 'shape' has virtual method 'shap' but non-virtual destructor. lass 'square' has virtual method 'shap' but non-virtual destructor. Class 'rectangle' has virtual method 'shap' but non-virtual destructor.
Чтобы очистить предупреждения, это в точности как то, что говорится в предупреждениях.
добавить в соответствующие классы их деструктор.
virtual ~shape();
virtual ~rectangle()
virtual ~square();
также для rectangle:: shap и square:: shap, добавьте виртуальный перед ним.