class polygon
的继承程序,它是基类,我创建了一个派生类调用矩形。在我的多边形基类中,我有一个构造函数和析构函数以及面积和周长的两个print
函数。在我的派生类中,我有一个构造函数和析构函数以及两个print
函数用于区域和周边以及calc area
和calc perimeter
函数。
我不明白的是我现在运行这个程序时得到的输出。我想要的输出是area = 45 perimeter = 28
。当我使用rect_1.calcarea()
但希望使用rect_1.printarea()
时,我会收到此输出。
#include<iostream>
using namespace std;
class polygon
{
protected:
double area;
double perimeter;
public:
polygon(){}
virtual ~polygon(){ }
virtual double printarea() const { return area ;}
virtual double printperimeter() const { return perimeter ;}
};
class rectangle : public polygon
{
public:
rectangle(double , double ) ;
~rectangle(){ }
double calcarea() ;
double calcperimeter() ;
virtual double printarea() const { return area ;}
virtual double printperimeter() const { return perimeter ;}
private:
double length;
double width;
};
rectangle::rectangle(double l , double w)
{
length = l;
width = w;
}
double rectangle::calcarea()
{
area = length*width;
return area;
}
double rectangle::calcperimeter()
{
perimeter = length + width;
perimeter = perimeter * 2;
return perimeter;
}
void main ()
{
rectangle rect_1 (9.0, 5.0);
cout<<"The Area of Rect_1 is " <<rect_1.printarea() <<endl;
cout<<"The Perimeter of Rect_1 is " <<rect_1.printperimeter() <<endl;
system("pause");
}
答案 0 :(得分:2)
printarea()
只是返回成员变量area
的值。你是a)不是把它初始化为任何东西而b)不计算任何地方的区域。
我猜测你的输出是零或垃圾 - 取决于编译器选项 - 因为区域没有初始化(即给定一个值)。
如果你在矩形的构造函数中调用calcarea()
,或者在实例化它的实例后调用main,那么printarea()
将产生正确的值。您甚至可以在calcarea()
内拨打printarea()
,以确保在需要时该值始终是最新的。
答案 1 :(得分:0)
尝试以下解决方案。这将解决您的问题。
以下是我改变的内容:
我已将Polygon设为抽象类,因为您只想调用printarea
的{{1}}或printperimeter
。此外,我分别致电Polygon
和calcarea
。虽然可以在calcperimeter
printarea
/ printperimeter
的正文中完成相同的操作。无需致电Rectangle
和calcarea
。
calcperimeter