oj-形状类族中的纯虚函数

01./*  
02.* 程序的版权和版本声明部分:  
03.* Copyright (c) 2011, 烟台大学计算机学院  
04.* All rights reserved.  
05.* 文件名称:test.cpp  
06.* 作    者:刘芳
07.* 完成日期:201 4年5 月29  日  
08.* 版 本 号:v1.0  
09.* 对任务及求解方法的描述部分: 
10.* 输入描述:无  
11.* 问题描述: 基类是纯虚函数,输入圆,正方形,长方形,三角形,梯形对应的值 
12.* 程序输出:他们面积总和
13.* 问题分析:略 
14.* 算法设计:略  
15.*/    


#include <iostream>
#include<iomanip>
using namespace std;
class Shape
{
public:
    virtual float area()const=0;
};
class  Circle:public Shape//圆
{
public:

    virtual float area()const;

    Circle(double);
    float getR()
    {
        return r;
    }
private:
    double r;

};
Circle::Circle(double R)
{
    r=R;
}
float Circle::area()const
{
    float s;
    s=3.14159*r*r;

    return s;
}
class  Square:public Shape//正方形
{
public:

    virtual float area()const;

    Square(double);
    float getA()
    {
        return a;
    }
private:
    double a;
};
Square:: Square(double a1)
{
    a=a1;
}
float  Square::area()const
{
    float s;
    s=a*a;
    return s;
}
class  Rectangle:public Shape//长方形
{
public:
    virtual float area()const;
    Rectangle(float,float);
    float getX()
    {
        return x;
    }
    float getY()
    {
        return y;
    }
private:
    float x;
    float y;
};
Rectangle::Rectangle(float a,float b)
{
    x=a;
    y=b;
}
float Rectangle::area()const
{
    float s;
    s=x*y;
    return s;
}
class Triangle:public Shape//三角形
{
public:
    virtual float area()const;
    Triangle(float,float);
    float getA()
    {
        return a;
    }
    float getH()
    {
        return h;
    }
private:
    float a;
    float h;

};
Triangle::Triangle(float x,float y)
{
    a=x;
    h=y;
}
float Triangle::area()const
{
    float s;
    s=1.0/2*(h*a);
    return s;
}
class Trapezoid:public Shape//梯形
{
public:
    virtual float area()const;
    Trapezoid(float,float,float);
    float getA()
    {
        return a;
    }
    float getB()
    {
        return b;
    }
    float getH()
    {
        return h;
    }
private:
    float a;
    float b;
    float h;
};
Trapezoid::Trapezoid(float w,float m,float n)
{
    a=w;
    b=m;
    h=n;
}
float Trapezoid::area()const
{
    float s;
    s=1.0/2*(a+b)*h;
    return s;
}
int main()


{


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


    cout<<fixed<<setprecision(2);
    cout<<"圆的半径:"<<endl;

    cin>>r;


    Circle circle(r);

    cout<<"输入正方形的边长:"<<endl;
    cin>>a;


    Square square(a);
    cout<<"请输入长方形的长,宽:"<<endl;

    cin>>a>>b;


    Rectangle rectangle(a,b);

    cout<<"请输入梯形的上,下底,高:"<<endl;
    cin>>w1>>w2>>h;


    Trapezoid trapezoid(w1,w1,h);

    cout<<"请输入三角形的底,高:"<<endl;
    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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值