随笔 - 25,  文章 - 0,  评论 - 0,  阅读 - 2434

一.问题描述:

定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)和Triangle (三角形),用虚函数分别计算各种图形的面积,并求出它们的和。要求用基类指针数组。使它的每一个元素指向一个派生类的对象。PI=3.1415926

二.代码实现:

复制代码
#include<iostream>
using namespace std;
class Shape{
public:
    virtual double Area()const=0;
};
class Circle:public Shape{
public:
    Circle(double radius):r(radius){
        
    }
    double r;
    virtual double Area()const{
        return    3.1415926*r*r;
    }

};
class Square:public Shape{
public:
    Square(double side):s(side){
        
    }
    double s;
    virtual double Area()const{
        return s*s;
    }
};
class Rectangle:public Shape{
public:
    Rectangle(double a1,double b1):a(a1),b(b1){
        
    }
    double a,b;
    virtual double Area()const{
        return a*b;
    }
};
class Triangle:public Shape{
public:
    Triangle(double width,double height):w(width),h(height){
        
    }
    double w,h;
    virtual double Area()const{
        return 0.5*w*h;
    }
};
class Trapezoid:public Shape{
public:
    Trapezoid(double shangd,double xiad,double traHeight):sd(shangd),xd(xiad),th(traHeight){}
    double sd,xd,th;
    virtual double Area()const{
        return (sd+xd)*th*0.5;
    }
};
int main(){

    Circle circle(12.6);
    Square square(3.5);
    Rectangle rectangle(4.5,8.4);
    Trapezoid trapezoid(2.0,4.5,3.2);
    Triangle triangle(4.5,8.4);
    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;
}
复制代码

 

posted on   标志蛋挞  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示