6-2 使用类输出图形
分数 5
全屏浏览题目
切换布局
作者 刘骥
单位 重庆大学
声明一个图形基类 Shape,在它的基础上派生出矩形类 Rectangle 和圆形类 Circle,他们都有计算面积和周长、输出图形信息等成员函数,再在 Rectangle 类的基础上派生出正方形类 Square。编写程序完成各类的定义和实现,以及类的使用。
注意:
题目中定义的所有数值类型的变量都使用 double 类型
π的值为 3.14159
测试程序样例:
#include <iostream> #define PI 3.14159 using namespace std; class Shape{ public: double getArea(){return 0;} double getPerimeter(){return 0;} }; class Rectangle:public Shape { protected: double height; double width; public: Rectangle() {}; Rectangle(double _height, double _width) { height = _height; width = _width; } double getArea(){ return height * width; } double getPerimeter(){ return 2 * (height + width); } void Print(){ cout << "Width=" << width << ",Height=" << height << endl; } }; /* 请在这里填写答案 */ int main() { double ra, rb; cin >> ra >> rb; Rectangle r1(ra, rb); double sa; cin >> sa; Square s1(sa); double ca, cb, cc; cin >> ca >> cb >> cc; Circle c1(ca, cb, cc); cout << "Rectangle" << endl; r1.Print(); cout << "Area=" << r1.getArea() << endl; cout << "Perimeter=" << r1.getPerimeter() << endl ; cout << "Square" << endl; s1.Print(); cout << "Area=" << s1.getArea() << endl; cout << "Perimeter=" << s1.getPerimeter() << endl; cout << "Circle" << endl; c1.Print(); cout << "Area=" << c1.getArea() << endl; cout << "Perimeter=" << c1.getPerimeter() << endl; return 0; }
输入样例:
在这里给出一组输入。例如:
4 2.5
8
4 5 6.5
输出样例:
Rectangle
Width=2.5,Height=4
Area=10
Perimeter=13
Square
Side=8
Area=64
Perimeter=32
Circle
Center=[4,5],Adius=6.5
Area=132.732
Perimeter=40.8407
提示
需要补充的类定义如下:
class Square:public Rectangle{ //...... }; class Circle: public Shape{ //...... };
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
class Square : public Shape
{
private:
double m_l;
public:
Square() {};
Square(double l)
{
m_l = l;
}
double getArea()
{
return m_l* m_l;
}
double getPerimeter()
{
return 4 * m_l;
}
void Print()
{
cout << "Side=" << m_l << endl;
}
};
class Circle :public Shape
{
private:
double m_r;
double m_x;
double m_y;
public:
Circle() {};
Circle(double x,double y,double r)
{
m_x = x;
m_y = y;
m_r = r;
}
double getArea()
{
return PI * m_r * m_r;
}
double getPerimeter()
{
return 2*PI*m_r;
}
void Print()
{
cout << "Center=" << '[' << m_x << ',' << m_y << ']' << ',' << "Adius=" << m_r << endl;
}
};