【发布时间】:2020-06-08 05:45:15
【问题描述】:
我正在尝试使用虚函数来计算矩形和三角形的面积,如下所示:-
#include<iostream>
using namespace std;
class Shape{
public:
int width;
int height;
void get(){
cin>>width;
cin>>height;
}
virtual void area(){
cout<<"Calculates area";
}
};
class Triangle:public Shape{
void area(){
int a = height*width/2;
cout<<a<<endl;
}
};
class Rectangle:public Shape{
void area(){
int a = height*width;
cout<<a<<endl;
}
};
int main(){
Shape shapeObj;
shapeObj.get();
Shape *ptr;
Triangle trObj;
Rectangle rectObj;
ptr=&trObj;
ptr->area();
ptr=&rectObj;
ptr->area();
}
但我的程序返回 0 作为两个形状的面积。我认为三角形和矩形类中没有分配宽度和高度的值。有人能告诉我哪里出错了吗?
【问题讨论】:
-
阅读一本好的 C++ programming 书籍,然后阅读 C++ 编译器的文档(例如 GCC 或 Clang...)。另请参阅一些好的 C++ reference 和 How to debug small programs。考虑使用GDB。请注意rule of five。在编译器中启用所有警告和调试信息,使用 GCC 使用
g++ -Wall -Wextra -g -
是的,这个错误是根本性的,任何 C++ 教程都应该回答它。此外,学习如何使用调试器逐步执行代码将是一件有用的事情,可以帮助您自己解决这个问题。如果您还没有,请使用tour 并阅读How to Ask。
-
将
main函数放在一边,您已经得到@john 的答案,派生类Rectangle和Triangle中的area()函数应该是公开的。class的默认值为private。