定义抽象基类Shape

定义抽象基类Shape, 其中纯虚函数printName()输出几何图形的名称和相应的成员数据、纯虚函数printArea()计算几何图形的面积。并由Shape类派生出5个派生类:Circle(圆形),数据成员为半径、Square(正方形) ,数据成员为边长、Rectangle(长方形) ,数据成员为长和宽、Trapezoid(梯形) ,数据成员为上底、下底和高、Triangle(三角形) ,数据成员为底和高。测试过程,定义一个指向基类的指针数组,使其每个元素指向一个动态产生的派生类对象,分别调用相应的成员函数显示各个几何图形的属性及面积,最终输出总面积值。

程序运行结果如下:

程序运行结果如下:
输入(依次输入圆半径、正方形边长、长方形长宽、梯形上底下底和高、三角形底边和高):
10
5
2 4
1 2 3
4 3
输出:
圆:半径=10,面积:314.159
正方形:边长=5,面积:25
长方形:长=2,宽=4,面积:8
梯形:上底=1,下底=2,高=3,面积:4.5
三角形:底边=4,高=3,面积:6
总面积:357.659

#include <iostream>
using namespace std;

class Shape
{
public:
virtual void printName() = 0;
virtual double printArea() = 0;
};

class Circle : public Shape
{
public:
Circle(double _r)
: r(_r) {}
void printName()
{
cout << "圆:半径=" << r << ",";
}
double printArea()
{
double pi = 3.14159265358979323846;
cout << "面积:" << pi * r * r << endl;
return pi * r * r;
}
private:
double r;
};

class Square : public Shape
{
public:
Square(double _d)
: d(_d) {}
void printName()
{
cout << "正方形:边长=" << d << "," ;
}
double printArea()
{
cout << "面积:" << d*d << endl;
return d*d;
}
private:
double d;
};

class Rectangle : public Shape
{
public:
Rectangle(double _d, double _l)
: d(_d), l(_l) {}
void printName()
{
cout << "长方形:长=" << d << ",宽=" << l << ",";
}
double printArea()
{
cout << "面积:" << d*l << endl;
return d*l;
}
private:
double d,l;
};

class Trapezoid : public Shape
{
public:
Trapezoid(double _d, double _l, double _h)
: d(_d), l(_l), h(_h) {}
void printName()
{
cout << "梯形:上底=" << d << ",下底=" << l << ",高=" << h << ",";
}
double printArea()
{
cout << "面积:" << (d+l)*h/2 << endl;
return (d+l)*h/2;
}
private:
double d,l,h;
};

class Triangle : public Shape
{
public:
Triangle(double _d, double _h)
: d(_d), h(_h) {}
void printName()
{
cout << "三角形:底边=" << d << ",高=" << h << ",";
}
double printArea()
{
cout << "面积:" << d*h/2 << endl;
return d*h/2;
}
private:
double d,h;
};

int main()
{
Shape* s[5];
double r;
cin >> r;
s[0] = new Circle(r);
double d;
cin >> d;
s[1] = new Square(d);
double l;
cin >> d >> l;
s[2] = new Rectangle(d,l);
double h;
cin >> d >> l >> h;
s[3] = new Trapezoid(d,l,h);
cin >> d >> h;
s[4] = new Triangle(d,h);
double totalArea = 0;
for(int i=0;i<5;i++)
{
s[i]->printName();
totalArea += s[i]->printArea();
delete s[i];
}
cout << "总面积:" << totalArea << endl;
}追问

我交上去了,可是系统显示 错误答案(请仔细检查您的代码。不要在输出中有手误或任何未要求的字符)
怎么办?

追答

请问有OJ吗,输出的控制你可以自己调整一下,我已经是按照你的Sample来写的了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-02
public class Test {

public static void main(String[] args) {
Rectangle rectangle = new Rectangle(3, 5);
double area = rectangle.getArea();

System.out.println("Area for Circle with width = 3 and height = 5 is: " + area);

Circle circle = new Circle(2);
area = circle.getArea();

System.out.println("Area for Circle with r = 2 is: " + area);
}
}

abstract class Shape{
public abstract double getArea();
}

class Rectangle extends Shape{
private double width;
private double height;

public Rectangle(double width, double height){
this.width = width;
this.height = height;
}

public double getArea() {//长方形= 长* 宽
return width * height;
}
}

class Circle extends Shape{

private double r;

public Circle(double radius){
this.r = radius;
}

public double getArea() {//圆 = 圆周率 * r *r
return Math.PI * r * r;
}

}

---------------------------
Area for Circle with width = 3 and height = 5 is: 15.0
Area for Circle with r = 2 is: 12.566370614359172
第2个回答  2012-06-01
7
相似回答