虚函数-计算图形面积

01.//02.* Copyright (c) 2013, 烟台大学计算机学院      
02.//04.* 作    者: 马德鹏      
03.//05.* 完成日期:2014 年 6 月 29 日      
04.//06.* 版 本 号:v1.0      
05.//07.* 
#include <iostream>
#include <iomanip>
const double PI=3.1415927;
using namespace std;
class Shape
{
    public:
    virtual double area() const=0;
};
class Circle:public Shape
{
    public:
    Circle(double r):R(r){}
    double area()const
    {
        return (PI*R*R);
    }
    private:
    double R;
};
class Square:public Shape
{
    public:
    Square(double l):L(l){}
    double area()const
    {
        return L*L;
    }
    private:
    double L;
};
class Rectangle:public Shape
{
    public:
    Rectangle(double l,double w):lon(l),wide(w){};
    double area()const
    {
        return lon*wide;
    }
    private:
    double lon;
    double wide;
};
class Trapezoid:public Shape
{
    public:
    Trapezoid(double l,double d,double h):uplon(l),downlon(d),high(h) {};
    double area()const
    {
        return (uplon+downlon)*high/2;
    }
    private:
    double uplon;
    double downlon;
    double high;
};
class Triangle:public Shape
{
    public:
    Triangle(double l,double h):lo(l),hight(h){};
    double area() const
    {
        return (lo*hight)/2;
    }
    private:
    double lo;
    double hight;
};
int main()


{


    float r,a,b,w1,w2,w,h;


    cout<<fixed<<setprecision(2);


    cin>>r;


    Circle circle(r);


    cin>>a;


    Square square(a);


    cin>>a>>b;


    Rectangle rectangle(a,b);


    cin>>w1>>w2>>h;


    Trapezoid trapezoid(w1,w1,h);


    cin>>w>>h;


    Triangle triangle(w,h);


    Shape *pt[5]= {&circle,&square,&rectangle,&trapezoid,&triangle};


    double areas=0.0;


    for(int i=0; i<5; i++)


        areas=areas+pt[i]->area();


    cout<<"total of all areas="<<areas<<endl;


    return 0;


}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这道题目要使用虚函数计算各种图形面积虚函数是一种在基类中声明的函数,它可以被派生类重写,从而实现多态性。在这个问题中,我们可以定义一个基类Shape,其中包含一个虚函数area(),用于计算图形面积。然后,我们可以派生出各种图形的类,如圆形、矩形、三角形等,这些类都可以重写area()函数,以计算自己的面积。最后,我们可以创建这些类的对象,并调用它们的area()函数来计算它们的面积。这样,我们就可以使用虚函数计算各种图形面积了。 ### 回答2: 题目要使用虚函数计算各种图形面积虚函数是一种动态多态性的体现,它使得子类重写父类的方法,以便实现相同的行为呈现不同的结果。在计算图形面积的问题上,如果我们想要使用不同的公式来计算不同类型的图形面积,我们就可以利用虚函数来实现这个目的。 实现步骤: 1. 定义一个基类'BaseShape',其中包含一个纯虚函数'virtual float area() = 0;',用于计算图形面积。 2. 定义多个继承自'BaseShape'的子类,分别对应不同类型的图形,每个子类中都需要重写基类的区函数,并实现相应的计算面积的逻辑。 3. 在主函数中,可以通过基类指针指向子类对象,然后调用这个指针的'area()'函数,来计算选定图形面积。 例如: class BaseShape { public: virtual float area() = 0; }; class Circle : public BaseShape { public: float radius; Circle(float r) : radius(r) {} virtual float area() { return 3.14f * radius * radius; } }; class Rectangle : public BaseShape { public: float length, width; Rectangle(float l, float w) : length(l), width(w) {} virtual float area() { return length * width; } }; int main() { BaseShape* circle1 = new Circle(5.5f); //定义一个类型为圆形的对象 BaseShape* rectangle1 = new Rectangle(4.0f, 5.0f); //定义一个类型为矩形的对象 std::cout << "面积为:" << circle1->area() << std::endl; //输出圆形对象的面积 std::cout << "面积为:" << rectangle1->area() << std::endl; //输出矩形对象的面积 delete circle1; delete rectangle1; return 0; } 在这个例子里,我们定义了两个子类,圆形和矩形,每个子类都有自己的计算面积的函数。在主函数中,我们通过基类指针分别创建了一个圆形对象和一个矩形对象,并用同样的方式输出了它们的面积。这里需要注意的是,由于基类的计算面积的函数是纯虚函数,所以被定义为抽象类,只能被继承。这样,我们就可以利用虚函数来实现对不同图形类型的面积计算,并能够实现代码的高效复用。 ### 回答3: 这道题目要我们使用虚函数计算各种图形面积虚函数是C++中的一种重要特性,它允许在父类中声明一个虚函数,在子类中进行重写,以便实现多态性。本题的解题思路就是通过抽象出一个图形类,再派生出各种不同的子类,利用多态性来计算不同形状的图形面积。 对于这个图形类,我们需要在其内部定义一个纯虚函数`virtual double area() = 0;`。记得在该纯虚函数前面加上关键字virtual,表示该函数是一个虚函数。并且要在最后面加上`= 0`,表示它是一个纯虚函数,不能被子类继承而不重写。 接着派生出一个`Rectangle`(矩形)类和一个`Circle`(圆形)类,并分别实现其`area()`函数。这些子类的`area()`函数将override父类的虚函数,具体实现不同的面积计算方法。例如矩形的面积计算公式是长乘以宽,圆形的面积计算公式是π乘以半径的平方。 下面我们需要一个计算各种图形面积的函数,这个函数的具体实现就要用到多态性了。这个函数的输入式一个指向图形类的指针,运用虚函数的特性,直接调用该指针所指向的对象的`area()`函数。然后将计算出的面积打印出来即可。 当然,这个虚函数除了`area()`函数外,我们还可以在图像类中定义其他虚函数或普通成员函数,例如计算周长、获取名称等等。这样,我们就可以使用虚函数实现面向对象编程的多态性和抽象性,将代码设计得更加优雅和可扩展。 最后,在运行时,我们可以用指向子类对象的基类指针来代替子类对象的名称,从而生成子类对象的实例并调用相应的函数。这种方式也被称为向上类型转换。例如: ``` Shape *shape = new Rectangle(5.0, 6.0); cout << "Rectangle area is: " << shape->area() << endl; ``` 这段代码将会生成一个`Rectangle`对象,并调用其`area()`函数,最终输出结果为矩形的面积
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HH-madp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值