课后习题(2)
定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)和Triangle (三角形),用虚函数分别计算各种图形的面积,并求出它们的和。要求用基类指针数组。使它的每一个元素指向一个派生类的对象。PI=3.1415926
输入格式:
请在这里写输入格式。例如:输入在一行中给出9个大于0的数,用空格分隔,分别代表圆的半径,正方形的边长,矩形的宽和高,梯形的上底、下底和高,三角形的底和高。
输出格式:
请在这里描述输出格式。例如:输出所有图形的面积和,小数点后保留3位有效数字。
输入样例:
在这里给出一组输入。例如:
12.6 3.5 4.5 8.4 2.0 4.5 3.2 4.5 8.4
输出样例:
在这里给出相应的输出。例如:
total of all areas = 578.109
设计思路:
1.定义一个基类Shape,衍生出子类Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)和Triangle (三角形)包含构造函数和一个求面积的虚函数。
2.在主函数中定义一个基类指针数组,使它的每一个元素指向一个派生类对象。宏定义一个PI值为3.1415926.
流程图:
、
代码实现:
#include<iostream> using namespace std; #define PI 3.1415926 class Shape {//基类 public: virtual double area() = 0; }; class Circle :public Shape//圆面积 { private: double radius; public: Circle(double a) { radius = a; } virtual double area() { return PI * radius * radius; } }; class Square :public Shape//正方形面积 { private: double x; public: Square(double a) { x = a; } virtual double area() { return x * x; } }; class Rectangle : public Shape//长方形面积 { private: double l, w; public: Rectangle(double a, double b) { l = a; w = b; } virtual double area() { return l* w; } }; class Trapezoid :public Shape//梯形面积 { private: double d1, d2, h; public: Trapezoid(double a, double b, double c) { d1 = a; d2 = b; h = c; } virtual double area() { return (d1 + d2) * h / 2; } }; class Triangle :public Shape//三角形面积 { private: double d, h; public: Triangle(double a, double b) { d = a; h = b; } virtual double area() { return d * h / 2; } }; int main() { double x1, x2, x3, x4, x5, x6, x7, x8, x9; cin >> x1 >> x2 >> x3 >> x4 >> x5 >> x6 >> x7 >> x8 >> x9; Shape* shape[5] = { new Circle(x1),new Square(x2),new Rectangle(x3,x4),new Trapezoid(x5,x6,x7),new Triangle(x8,x9) }; double s; s = shape[0]->area() + shape[1]->area() + shape[2]->area() + shape[3]->area() + shape[4]->area(); cout << "total of all areas = " << s; return 0; }
声明抽象基类Shape,由它派生出三个类,圆形Circle,矩形Rectangle,三角形Triangle,用一个函数输出三个面积。
输入格式:
在一行中依次输入5个数,圆的半径,长方形的高和宽,三角形的高和底,中间用空格分隔
输出格式:
圆的面积,长方形的面积,三角形的面积,小数点后保留2位有效数字,每个面积占一行。
输入样例:
在这里给出一组输入。例如:
3 3 4 3 4
输出样例:
在这里给出相应的输出。例如:
28.27 12.00 6.00
设计思路:
1.声明抽象基类Shape,由它派生出三个类,圆形Circle,矩形Rectangle,三角形Triangle。
2.定义一个有五个值的函数,调用圆,矩形,三角形面积。
3.输入五个值,用于计算各个面积。
3.输出结果。
流程图:
代码实现:
#include<iostream> #include<iomanip> using namespace std; #define PI 3.1415926 class Shape { public: virtual void area() = 0; }; class Circle :public Shape { private: double radius; public: Circle(double a) { radius = a; } virtual void area() { cout<< fixed << setprecision(2) << PI * radius * radius<<endl; } }; class Rectangle : public Shape { private: double l, w; public: Rectangle(double a, double b) { l = a; w = b; } virtual void area() { cout<<fixed<<setprecision(2)<<l* w<<endl; } }; class Triangle :public Shape { private: double d, h; public: Triangle(double a, double b) { d = a; h = b; } virtual void area() { cout<<fixed<<setprecision(2)<< d * h / 2<<endl; } }; void Area(double x1, double x2, double x3, double x4, double x5) { Shape* shape[3] = { new Circle(x1),new Rectangle(x2,x3),new Triangle(x4,x5) }; shape[0]->area(); shape[1]->area(); shape[2]->area(); } int main() { double a1, a2, a3, a4, a5; cin >> a1 >> a2 >> a3 >> a4 >> a5; Area(a1, a2, a3, a4, a5); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了