首页 > 其他分享 >虚函数计算各种图形面积之和

虚函数计算各种图形面积之和

时间:2023-05-23 19:33:07浏览次数:35  
标签:return 函数 area float private Shape 计算 图形 public

一、问题描述。

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

输入格式:

输入在一行中,给出9个大于0的数,用空格分隔,分别代表圆的半径,正方形的边长,矩形的宽和高,梯形的上底、下底和高,三角形的底和高。

输出格式:

输出所有图形的面积和,小数点后保留3位有效数字。

代码实现。

#include<iostream>
#include<iomanip>
using namespace std;
#define pl 3.14159f
class Shape
{
public:
virtual float area() = 0;
};
class Circle :public Shape
{
private:
float r;
public:
Circle(float a){ r = a; }
float area()
{
return r*r*pl;
}
};
class Square:public Shape
{
private:
float a;
public:
Square(float sidea){ a = sidea; }
float area()
{
return a*a;
}
};

class Rectangle:public Shape
{
private:
float a, b;
public:
Rectangle(float sidea, float sideb){ a = sidea; b = sideb; }
float area()
{
return a*b;
}
};
class Trapezoid:public Shape
{
private:
float s, n, h;
public:
Trapezoid(float sides, float siden, float sideh){ s = sides; n = siden; h = sideh; }
float area()
{
return ((s + n)*h) / 2;
}
};
class Triangle:public Shape
{
private:
float s, h;
public:
Triangle(float sides, float x){ s = sides; h = x; }
float area()
{
return (s*h) / 2;
}
};
int main()
{
float a, b, c, d, e, f, g, h, i;
float sum=0;
cin >> a >> b >> c >> d >> e >> f >> g >> h >> i;
Shape*p[5];
Circle c1(a);
p[0] = &c1;
Square s1(b);
p[1] = &s1;
Rectangle r1(c, d);
p[2] = &r1;
Trapezoid t1(e, f, g);
p[3] = &t1;
Triangle t2(h, i);
p[4] = &t2;
for (int j = 0; j < 5; j++)
{
sum = sum + p[j]->area();
}
cout <<fixed<<setprecision(3) <<sum << endl;
}

标签:return,函数,area,float,private,Shape,计算,图形,public
From: https://www.cnblogs.com/luoqingci/p/17426166.html

相关文章

  • C++ 线程安全和可重入函数
    线程安全线程安全是指在多线程环境下,同一函数或函数库被不同线程调用,不会出现数据不一致的情况。如何确保一个函数是线程安全的:1.对共享资源加锁。2.从逻辑上进行设计,保证资源的访问修改不会冲突。一般情况下我们使用加锁的方式保证线程安全,具体加锁操作有互斥锁、条件变量、......
  • 【linux基础】ftok函数解析
    前言最新项目代码有关信号量、共享内存,直接使用数值,不能得到预想的效果,调试发现不能直接使用数值,而是ftok函数获取键值,此前不了解,故记录之。原理共享内存、消息队列、信号量都是通过一个中间介质来进行通信的,这种介质多的是。就是怎么区分出来,就像唯一一个身份证来区分人一样。......
  • UniswapV3金融公式计算
    概念unCollectFees未提取奖励CollectFees已提取奖励IL无偿损失公式NetAssets净资产每个pool的两个币的amount(数量)*price(单价)的累加值,但不包含奖励IL无偿损失开仓时的币数量价格-当前的币的数量价格=无偿损失(就是币价波动带来的资产的差异)APR收益率=(已......
  • Python函数
    1.函数函数是什么?函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里......
  • 实验4 函数与异常处理编程
    task1程序源码:1print(sum)2sum=423print(sum)45definc(n):6sum=n+17print(sum)8returnsum9sum=inc(7)+inc(7)10print(sum)运行截图:Q1:  task1.py源码中,共有4处有python语句print(sum)(line1,line3,line7,line11......
  • 函数进阶
    函数进阶函数的动态参数(万能参数)*args**kwargs为了扩展,对于传入的实参数量不固定,而创建的*args用法在函数定义的时候,*args聚合,即将所有实参的位置参数聚合到一个元组上,并将这个元组赋值给args.deffuc1(a,*args):print(a)print(args)fuc1(1,2,3,4,5,6,7)......
  • 函数名的作用:函数也是第一类对象
    函数名的作用:函数也是第一类对象​ 1.函数名就是函数的内存地址2.函数名可以作为变量3.函数名可以作为函数的参数4.函数名还可以当做函数的返回值5.函数名可以作为容器类型的元素(列表中的一个元素)globals()locals()​ globals()#作用是返回全局变......
  • memset() 函数的使用
    //Lvxin1-1 memset.cpp //memset()函数的使用 #include<stdio.h>#include<string.h> intmain(){   charstr[]="almosteveryprogrammershouldknowmemset!";   doubled;   memset(&d,0,sizeof(d));   memset(str,'......
  • 新技术赋能双循环格局,第九届全球云计算大会·潮你“甬”来!
    热情似火的不只有盛夏的骄阳,更有人们对于科技的无限追求。6月17日,以“新技术赋能双循环发展”为主题的第九届全球云计算大会·中国站(CloudConnectChina2021)在宁波泛太平洋大酒店盛大开幕。今年,在加快构建以国内大循环为主体,国内国际双循环相互促进的新发展格局背景下,大会通过......
  • 科技云报道荣膺全球云计算大会“云鼎奖”2020-2021年度优秀团队
    2021年6月16日-18日,第九届全球云计算大会·中国站(CloudConnectChina)在宁波隆重举行。本次大会上,科技云报道荣膺全球云计算大会“云鼎奖”2020-2021年度优秀团队奖项。科技云报道团队代表上台领奖(左一)科技云报道荣膺“云鼎奖”2020-2021年度优秀团队作为每年全球云计算大会·中国......