我正在做一个非常具体的说明的作业,如果有什么要求,我将在我创建的代码下方发布。但是,简而言之,我要创建一个BasicShape
抽象类,以及一个Circle
和Rectangle
子类。每个子类都有一种计算形状面积的方法。使用成员变量计算面积。但是,在下面的代码中,这些成员变量从未分配值。我对如何分配给他们感到困惑,因为Circle
和Rectangle
方法还要求将参数传递给他们。这些参数{{1}的x
,y
,r
和Circle
的{{1}},w
在主程序中指定生成了形状的新实例,但是这些值似乎也不起作用,因为输出始终为0。传递给方法的参数与成员变量之间有什么关系?通过调用l
或Rectangle
实例时设置的参数来给成员变量赋值,怎么办?
这是我的代码:
Circle
以下是分配说明:
定义一个称为BasicShape的纯抽象基类。 BasicShape类应具有以下成员:
私有成员变量: 面积,用于容纳形状面积的两倍。
公共成员方法: getArea():此方法应返回成员变量区域中的值。 calcArea():此方法应该是纯虚拟方法。
接下来,定义一个名为Circle的类。它应该从BasicShape类派生。它应该具有以下成员:
私有成员变量: centerX,一个整数,用于保存圆心的x坐标。 centerY,一个整数,用于保存圆心的y坐标。 半径,用于保存圆半径的双精度值。
公共成员方法:
Circle(int x,int y,int r):接受centerX,centerY和半径的值。应该调用覆盖的calcArea 如下所述。
genCenterX:返回centerX中的值
genCenterY:返回centerY中的值
calcArea():计算圆的面积(面积= 3.14159 *半径*半径),并将结果存储在继承的成员区域中。
接下来,定义一个名为Rectangle的类。它应该从BasicShape类派生。它应具有以下成员: 私有成员变量:
width,用于保存矩形宽度的整数 长度,用于保存矩形长度的整数
公共成员方法:
Rectangle(int w,int l):接受宽度和长度的值。应该调用下面描述的覆盖的calcArea方法。
getWidth():返回宽度值。 getLength():返回长度的值 calcArea():计算圆的面积(面积=长*宽),并将结果存储在继承的成员区域中。
创建这些类之后,创建一个定义了Circle对象和Rectangle对象的主程序。
演示每个对象正确计算并报告其面积。
答案 0 :(得分:3)
您不将构造函数传递的值分配给成员变量。因此,当您调用 calcArea 时,将使用类型为int或double(默认为零)的默认值
来执行它class Circle : BasicShape
{
private int centerX;
private int centerY;
private double radius;
public Circle(int x, int y, double r)
{
radius = r;
// Now you are executing the calcArea using the value passed in
calcArea();
}
....
}
class Rectangle : BasicShape
{
private int width;
private int length;
public Rectangle(int w, int l)
{
width = w;
length = l;
calcArea();
}
....
}
calcArea 的覆盖需要将成员变量设置为其他值,否则这些成员变量将使用其默认值(整数和双精度均为零)初始化,因此该方法无法产生有意义的结果。