int main() { double r,h,e1,e2,e3,eup,ebo,w; cin>>r; Circle c(r); cin>>w; Square sq(w); cin>>e1>>e2>>e3; Triangle tr(e1,e2,e3); cin>>w>>h; Rectangle re(w,h); cin>>eup>>ebo>>h; Trapezoid trap(eup,ebo,h); double sum=0; Shape* pShapes[5]; //定义基类指针数组 pShapes[0] = &c; //将派生类对象的地址赋值给基类指针数组元素 pShapes[1] = &sq; pShapes[2] = &tr; pShapes[3] = &re; pShapes[4] = &trap; for(int i=0; i<5; i++){ sum += pShapes[i]->area(); //调用虚函数计算面积 } cout<<"area sum="<<sum; return 0; }
时间: 2024-04-27 13:21:14 浏览: 9
这段代码是一个完整的程序,实现了计算不同形状的面积并求和的功能。程序首先定义了5个派生类,分别用来计算圆、正方形、矩形、梯形和三角形的面积,这些派生类都继承自抽象类Shape,并实现了纯虚函数area()。程序接着定义了基类指针数组pShapes,将派生类对象的地址赋值给数组元素,然后通过循环遍历数组,调用每个派生类对象的虚函数area()计算面积,并将结果累加到变量sum中。最后输出sum的值,即为所有形状面积的和。
相关问题
c++写一个程序,定义抽象类Shape,由它派生出5个派生类:Circle(圆),Square(正方形),Rectangle(矩形),Trapezoid(梯形),Triangle(三角形),用虚函数area()分别计算几种图形的面积,并求他们的和,要求使用基类指针数组,使它的每个元素都指向一个派生类对象 并补充下面代码: #include <iostream> using namespace std; #include<string> #include"time.h" #include"math.h" #define PI 3.1415926; int main() { double r,h,e1,e2,e3,eup,ebo,w; cin>>r; Circle c(r); cin>>w; Square sq(w); cin>>e1>>e2>>e3; Triangle tr(e1,e2,e3); cin>>w>>h; Rectangle re(w,h); cin>>eup>>ebo>>h; Trapezoid trap(eup,ebo,h); double sum=0; cout<<"area sum="<<sum; }
以下为完整代码:
```
#include <iostream>
#include <string>
#include <time.h>
#include <math.h>
#define PI 3.1415926
using namespace std;
class Shape {
public:
virtual double area() = 0;
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) { radius = r; }
double area() { return PI * radius * radius; }
};
class Square : public Shape {
private:
double width;
public:
Square(double w) { width = w; }
double area() { return width * width; }
};
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) { width = w; height = h; }
double area() { return width * height; }
};
class Trapezoid : public Shape {
private:
double upperEdge, bottomEdge, height;
public:
Trapezoid(double up, double bo, double h) { upperEdge = up; bottomEdge = bo; height = h; }
double area() { return (upperEdge + bottomEdge) * height / 2; }
};
class Triangle : public Shape {
private:
double edge1, edge2, edge3;
public:
Triangle(double e1, double e2, double e3) { edge1 = e1; edge2 = e2; edge3 = e3; }
double area() {
double p = (edge1 + edge2 + edge3) / 2;
return sqrt(p * (p - edge1) * (p - edge2) * (p - edge3));
}
};
int main() {
double r, h, e1, e2, e3, eup, ebo, w;
cin >> r;
Circle c(r);
cin >> w;
Square sq(w);
cin >> e1 >> e2 >> e3;
Triangle tr(e1, e2, e3);
cin >> w >> h;
Rectangle re(w, h);
cin >> eup >> ebo >> h;
Trapezoid trap(eup, ebo, h);
Shape* arr[5] = { &c, &sq, &tr, &re, &trap };
double sum = 0;
for (int i = 0; i < 5; i++) {
sum += arr[i]->area();
}
cout << "area sum=" << sum;
return 0;
}
```
输入示例:
```
5
4
3 4 5
2 3
4 6 3
```
输出示例:
```
area sum=72.8496
```
要求如下:编写一个能计算不同形状的面积数组的小程序,定义抽象类Shape,由它派生出5个派生类:Circle(圆),Square(正方形),Rectangle(矩形),Trapezoid(梯形),Triangle(三角形),用虚函数area()分别计算几种图形的面积,并求他们的和,要求使用基类指针数组,使它的每个元素都指向一个派生类对象。根据上述要求完善下列代码 #include <iostream> using namespace std; #include<string> #include"time.h" #include"math.h" #define PI 3.1415926; //请在begin和end之间填入代码 /begin***/ /end/ int main() { double r,h,e1,e2,e3,eup,ebo,w; cin>>r; Circle c(r); cin>>w; Square sq(w); cin>>e1>>e2>>e3; Triangle tr(e1,e2,e3); cin>>w>>h; Rectangle re(w,h); cin>>eup>>ebo>>h; Trapezoid trap(eup,ebo,h); double sum=0; /begin/ /*end/ cout<<"area sum="<<sum; }
/begin***/
class Shape{
public:
virtual double area() = 0; //纯虚函数,用来计算面积
};
class Circle : public Shape{
private:
double radius;
public:
Circle(double r){
radius = r;
}
double area(){ //计算圆的面积
return PI * pow(radius,2);
}
};
class Square : public Shape{
private:
double width;
public:
Square(double w){
width = w;
}
double area(){ //计算正方形的面积
return pow(width,2);
}
};
class Rectangle : public Shape{
private:
double width;
double height;
public:
Rectangle(double w, double h){
width = w;
height = h;
}
double area(){ //计算矩形的面积
return width * height;
}
};
class Trapezoid : public Shape{
private:
double upperEdge;
double bottomEdge;
double height;
public:
Trapezoid(double u, double b, double h){
upperEdge = u;
bottomEdge = b;
height = h;
}
double area(){ //计算梯形的面积
return (upperEdge + bottomEdge) * height / 2;
}
};
class Triangle : public Shape{
private:
double edge1;
double edge2;
double edge3;
public:
Triangle(double e1, double e2, double e3){
edge1 = e1;
edge2 = e2;
edge3 = e3;
}
double area(){ //计算三角形的面积
double p = (edge1 + edge2 + edge3) / 2;
return sqrt(p * (p - edge1) * (p - edge2) * (p - edge3));
}
};
/*end*/
int main() {
double r,h,e1,e2,e3,eup,ebo,w;
cin>>r;
Circle c(r);
cin>>w;
Square sq(w);
cin>>e1>>e2>>e3;
Triangle tr(e1,e2,e3);
cin>>w>>h;
Rectangle re(w,h);
cin>>eup>>ebo>>h;
Trapezoid trap(eup,ebo,h);
double sum=0;
Shape* pShapes[5]; //定义基类指针数组
pShapes[0] = &c; //将派生类对象的地址赋值给基类指针数组元素
pShapes[1] = &sq;
pShapes[2] = &tr;
pShapes[3] = &re;
pShapes[4] = &trap;
for(int i=0; i<5; i++){
sum += pShapes[i]->area(); //调用虚函数计算面积
}
cout<<"area sum="<<sum;
return 0;
}
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)