定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square。

输入格式

Rectangle的长和宽、Circle的半径、Square的边长

输出格式

Rectangle、Circle和Square对应的面积。四舍五入到整数

输入样例 

3 7 6 4
2.1 3.5 10.3 4.5

输出样例 

21 113 16
7 333 20

 示例:
 

#include <iostream>
#include <math.h>
using namespace std;
float pi = 3.1415926;
class Shape
{
protected:
    float x, y;
    //在矩形中x.y表示为长和宽,在圆形中都表示为半径,在正方形中都表示为边长
public:
    void getxy(float X, float Y) ;
    void getArea();
};
void Shape::getxy(float X, float Y){ x = X; y = Y; }
void Shape::getArea() { cout <<round( x * y) << endl; }

//派生Rectangle
class Rectangle : public Shape
{
public:
    void getlw(float l, float w);//读取长度和宽度
};
void Rectangle::getlw(float l, float w) { x = l; y = w;}

//派生Circle
class Circle: public Shape
{
public:
    void getr(float r);//读取半径
    void getArea();
};
void Circle::getr(float r) { x = r; y = r; }
void Circle::getArea() { cout<<round (pi* x * y) << endl; }//圆的面积输出

class Square : public Rectangle
{
public:
    void getb(float b);//读取边长
};
void Square::getb(float b) { x = b; y = b; }

int main()
{
    Rectangle myjx;
    Circle myyx;
    Square myzfx;
    float x, y, r, b;
    while (cin >> x >> y >> r >> b)
    {
        myjx.getxy(x, y);
        myjx.getArea();

        myyx.getr(r);
        myyx.getArea();

        myzfx.getb(b);
        myzfx.getArea();
    }
    return 0;
}
 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
按以下描述和要求建立两个基类 Rectangle(矩形) 和派生类 Cube(正方体) 1. Rectangle 私有成员:     double x1, y1;            //左下角的坐标     double x2, y2;            //右上角的坐标 公有成员:     带缺省值的构造函数 Rectangle(double a=0,double b=0, double c=0, double d=0),对矩 形的左下角坐标和右上角坐标进行初始化,若未赋初值,则矩形的左下角坐标和右上角 坐标都采用缺省值 0;     函数 double getwidth()计算并返回矩形的宽;     函数 double getlength()计算并返回矩形的长;     函数 void display()输矩形的各坐标及长宽。 2. 立方体 Cube 的底面矩形从基类继承 Cube 私有成员:     string name  或者 char name[10];              //立方体的名称(字符串对象)       double h;                                                      //立方体高度 公有成员:     带缺省值的构造函数 Cube(double a=0, double b=0, double c=0, double d=0, char *s=0, double h1=0),其中 char *s 是立方体的名称,double h1 是立方体的高度值;     函数 void set(char *, double)用来修改立方体的名称和高度值;     函数 void display()输立方体全部信息,并计算体积;     函数 Cube add(Cube &S)将形式参数 S 的高度加到 this 对象上。 string 包含在头文件 string.h 中。 3. 主函数要求: (1) 定义 Rectangle 对象 A{坐标:10, 10, 30,40}; 定义 Cube 对象 B{坐标:20, 10, 30, 40;名称和高度:Box, 60}、C(C 数据由 B 拷贝 产生)和 D(D 数据暂无)。 (2) 调用函数 set 修改对象 C 的名称和高度值,数据为{Trunk, 95}。 (3) 调用函数 display 及相关函数对象 A、B 和 C 的全部数据,计算 B 和 C 的体 积。每个对象的信息占一行。 (4) 调用 add 函数,将 B 和 C 的高度值之和赋值给 D 的高度值,输 D 的全部数据,计 算并输 D 的体积。 文件为word形式,请复制粘贴到VS的cpp文件中运行。
### 回答1: 定义一个Shape基类,包含一个纯虚函数getArea(),用于计算对象面积。在此基础派生RectangleCircle,分别实现getArea()函数计算矩形和圆的面积。 class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: Rectangle(double w, double h) : width(w), height(h) {} double getArea() { return width * height; } private: double width; double height; }; class Circle : public Shape { public: Circle(double r) : radius(r) {} double getArea() { return 3.14 * radius * radius; } private: double radius; }; 然后使用Rectangle创建一个派生类Square,重载getArea()函数计算正方形的面积。 class Square : public Rectangle { public: Square(double s) : Rectangle(s, s) {} double getArea() { return Rectangle::getArea(); } }; 这样,我们就定义了一个Shape基类,以及两个派生类RectangleCircle,还创建了一个派生类Square,实现了多态性和代码复用。 ### 回答2: SHAPE(形状)基类可以是一个抽象基类,只定义函数,不实现具体操作。同时,为了计算各种形状的面积,需要从SHAPE基类派生具体的形状,如矩形、圆、正方形等。 在SHAPE中,可以定义公共成员和函数,如面积、周长等抽象函数,以及对形状常用的变量和方法进行抽象。在实际的派生类中,只需要实现抽象函数即可。例如,关于面积计算函数可以定义为虚函数,以便不同形状可以根据自己的实际情况进行重载。 从SHAPE派生矩形RECTANGLE中定义长和宽这两个数据成员,并实现计算面积的公共函数getarea()。因为矩形的面积是长乘以宽,所以矩形实现的getarea()函数可以直接调用数据成员计算面积CIRCLE派生SHAPE也是似的,只不过中的数据成员变为半径,公共函数为getarea()。因为圆的面积是半径的平方乘以π,所以CIRCLE实现的getarea()函数需要对半径进行计算才能返回总面积。 最后派生正方形SQUARE,正方形是矩形的特殊形式,因此在SQUARE中仍然可以继承矩形,只需要重载长和宽两个数据成员即可,计算面积的方法不受影响。 SHAPE基类派生类的设计模式可以有效地应对形状的不同需求,从而能够优雅地处理面积、周长等公共函数,避免了冗余的代码和数据成员。同时,该模式也可以为未来更多形状的添加以及程序的扩展留下足够的空间。 ### 回答3: shape基类一个最基本的形状,它包含了一个抽象方法——getarea()函数,用于计算一个形状对象面积。这个基类一个抽象的,不能直接实例化,只能用来作为其它形状基类派生它们。 在shape基类的基础上,派生rectanglecircle两个,它们都包含了getarea()函数,用于计算它们的面积。其中,rectangle还包含了两个成员变量——宽和高,circle还包含了一个成员变量——半径。这些都可以用来实例化对象来表示相应的形状。 除了rectanglecircle这两个以外,也可以根据需要在shape基类的基础上派生其它形状,比如square、triangle等。其中,square派生rectangle的,它只需要提供一个边长即可,因为它的宽和高是相等的。 在实现square时,只需要重新定义它的构造函数,让它只接受一个参数——边长,并将宽和高都设置为边长即可。这样,我们就可以用square来创建正方形对象了。 总的来说,shape基类派生的各个形状的结构设计是非常合理和充分的,它们非常符合面向对象的设计理念。通过使用这些,我们可以方便地实现各种不同的形状对象,并轻松地计算它们的面积

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值