【发布时间】:2014-08-13 05:04:59
【问题描述】:
我没有通过这个程序获得所需的输出。我收到的警告是:
- “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;
}
【问题讨论】:
-
您在打印值之前返回。
-
“显示在屏幕上”?您如何期望程序知道您希望在屏幕上显示某些内容? C++ 中的任何内容都不会自行“显示在屏幕上”。应该是您将内容发送到要显示的屏幕上。但是你永远不会在你的代码中这样做。这就是为什么什么都没有显示的原因。
-
出现这些警告是因为您应该在基类形状中定义一个虚拟析构函数,例如:virtual ~shape(){};
-
@AndreyT- 好的,你说得对。但是我应该在哪里给出 cout 语句 - 在 main 或函数定义中?
-
cout shap(6,3);应该工作。
标签: c++ inheritance constructor pure-virtual