习题 12.5 写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle、Square、Rectangle、Tarpezoid、Triangle。用虚函数分别计算几种图形面积,并求。。。
2023-09-14 09:06:56 时间
C++程序设计(第三版) 谭浩强 习题12.5 个人设计
习题 12.5 写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle、Square、Rectangle、Tarpezoid、Triangle。用虚函数分别计算几种图形面积,并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。
代码块:
#include <iostream>
#include <iomanip>
using namespace std;
class Shape
{
public:
Shape(){}
virtual ~Shape(){}
virtual double Area() const{return 0;}
virtual void shapeName() const =0;
};
class Circle: public Shape
{
public:
Circle(double r){radius=r;}
~Circle(){}
virtual double Area() const {return 3.14159*radius*radius;}
virtual void shapeName() const {cout<<"Circle ";}
protected:
double radius;
};
class Square: public Shape
{
public:
Square(double a){x=a;}
~Square(){}
virtual double Area() const {return x*x;}
virtual void shapeName() const {cout<<"Square ";}
protected:
double x;
};
class Rectangle: public Shape
{
public:
Rectangle(double a, double b){x=a; y=b;}
~Rectangle(){}
virtual double Area() const {return x*y;}
virtual void shapeName() const {cout<<"Rectangle ";}
protected:
double x, y;
};
class Trapezoid: public Shape
{
public:
Trapezoid(double a, double b, double c){x=a; y=b; z=c;}
~Trapezoid(){}
virtual double Area() const{return ((x+y)*z)/2;}
virtual void shapeName() const {cout<<"Trapezoid ";}
protected:
double x, y, z;
};
class Triangle: public Shape
{
public:
Triangle(double a, double h){x=a; y=h;}
~Triangle(){}
virtual double Area() const {return (x*y)/2;}
virtual void shapeName() const {cout<<"Triangle ";}
protected:
double x, y;
};
int main()
{
Circle circle(5);
Square square(4);
Rectangle rectangle(3, 4);
Trapezoid trapezoid(2.0, 3.0, 4.0);
Triangle triangle(4, 3);
double sum=0;
Shape *pt[5]={&circle, &square, &rectangle, &trapezoid, &triangle};
Shape **p;
for (p=pt; p<pt+5; p++){
(*p)->shapeName();
cout<<"area="<<(*p)->Area()<<endl;
sum+=(*p)->Area();
}
cout<<"Area sum="<<sum<<endl;
system("pause");
return 0;
}
相关文章
- 中国移动中标 4339 万云大单:爱数、华为、奇安信、新华三、超聚变、长安计算、中新创、阿里云是赢家
- 1行Python代码,计算程序的运行时间,也可以用在算法和接口的调优上
- golang 中 map 的装载因子以及 B 的计算逻辑
- 利用计算化学开发靶向疗法丨Alterome完成3500万美元A2轮融资
- 【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )
- 压缩版styleGAN,合成高保真图像,参数更少、计算复杂度更低
- 如何计算六西格玛项目的收益?
- 华为P50系列全球首发XD Optics计算光学:突破光学系统物理边界
- Linux C程序计算时差的挑战(linuxc计算时间差)
- MySQL中的std函数用于计算标准差(mysql中std函数)
- 使用 MySQL 计算两张表数据的巧妙方法(mysql 两张表计算)
- 多租户模式下的Redis高性能计算(多租户redis)
- 利用Oracle中乘法函数计算数值(oracle 中乘法函数)
- 计算100000数组js脚本的执行时间
- 根据经纬度计算地球上两点之间的距离js实现代码
- javascript计算用户打开网页的停留时间