ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

虚函数求面积

2019-07-06 16:42:55  阅读:176  来源: 互联网

标签:const 函数 GetArea double 面积 Shape return public


include<iostream>
#include<vector>
#include<iomanip>
#include<cmath>
using namespace std;
const double PI=3.1416;
class Shape{
public:
    virtual ~Shape(){}
    virtual double GetArea() const = 0;
};
class Circle:public Shape{
private:
    double R;
public:
    Circle(double r):R(r){}
    double GetArea()const{return PI*R*R;}
};
class Rectangle:public Shape{
private:
    double Length,Weth;
public:
    Rectangle(double L,double W):Length(L),Weth(W){}
    double GetArea()const {return Length*Weth;}
};
class Triangle:public Shape{
private:
    double a,b,c;
public:
    Triangle(double A,double B,double C):a(A),b(B),c(C){}
    double GetArea()const {return 0.25*sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a));}
};
double TotalArea (vector<Shape *> &A)
{
    double total=0;
    for(int i=0;i<A.size();i++)
    {
        total=total+A[i]->GetArea();
    }
    return total;
}
int main()
{
    vector<Shape*> A;
    string S;
    double a,b,c,totalarea;
    while(cin>>S){
        if(S=="circle")
        {
            Shape *p;
            cin>>a;
            p=new Circle(a);
            A.push_back(p);
        }
        if(S=="rectangle")
        {
            Shape *p;
            cin>>a>>b;
            p=new Rectangle(a,b);
            A.push_back(p);
        }
        if(S=="triangle")
        {
            Shape *p;
            cin>>a>>b>>c;
            p=new Triangle (a,b,c);
            A.push_back(p);
        }
    }
    totalarea=TotalArea(A);
    cout<<setiosflags(ios::fixed)<<setprecision(4);
    cout<<totalarea<<endl;
    for(int i=0;i<A.size();i++)
    {
        delete A[i];
    }
    return 0;
}

标签:const,函数,GetArea,double,面积,Shape,return,public
来源: https://blog.csdn.net/weixin_43894901/article/details/94868342

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有