#include <iostream> using namespace std; #include<string> #include"time.h" #include"math.h" #define PI 3.1415926 //请在begin和end之间填入代码 /**************begin*****************/ class Shape { public: virtual double area() = 0; }; class Circle : public Shape { public: Circle(double r) : radius(r) {} virtual double area() { return PI * radius * radius; } private: double radius; }; class Square : public Shape { public: Square(double w) : width(w) {} virtual double area() { return width * width; } private: double width; }; class Rectangle : public Shape { public: Rectangle(double w, double h) : width(w), height(h) {} virtual double area() { return width * height; } private: double width, height; }; class Trapezoid : public Shape { public: Trapezoid(double eu, double eb, double h) : up(eu), bottom(eb), height(h) {} virtual double area() { return (up + bottom) * height / 2; } private: double up, bottom, height; }; class Triangle : public Shape { public: Triangle(double e1, double e2, double e3) : edge1(e1), edge2(e2), edge3(e3) {} virtual double area() { double p = (edge1 + edge2 + edge3) / 2; return sqrt(p * (p - edge1) * (p - edge2) * (p - edge3)); } private: double edge1, edge2, 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; /*****************begin*******************/ Shape *shape[5]; for (int i = 0; i < 5; i++) { sum += shape[i]->area(); } cout << "area sum=" << sum << endl; /******************end*****************/ cout<<"area sum="<<sum; }以上代码有什么错
时间: 2023-07-05 22:34:14 浏览: 55
代码中存在一个错误,即在计算总面积之前,需要将各个图形的指针数组shape赋值。此时,shape数组中各元素的指针应指向各个图形的实例。在当前代码中,没有为shape数组中的元素分配内存空间,也没有将shape数组中的元素赋值为各个图形类型的实例。因此,在计算总面积时,程序会出现错误。
请将以下代码:
```
Shape *shape[5];
```
修改为:
```
Shape *shape[5] = {&c, &sq, &tr, &re, &trap};
```
这样,就可以将shape数组中的元素赋值为各个图形类型的实例。修改后的完整代码如下:
相关问题
#include<iostream> #include<cstdio> using namespace std;是什么意思
#include<iostream> #include<cstdio> using namespace std; 是C++中的预处理指令,用于引入头文件和命名空间。
1. #include<iostream> 是引入iostream头文件,其中包含了输入输出流的定义,例如cout和cin等。
2. #include<cstdio> 是引入cstdio头文件,其中包含了C语言标准输入输出函数的定义,例如printf和scanf等。
3. using namespace std; 是使用std命名空间,std是C++标准库的命名空间,其中包含了很多常用的函数和类。
这些预处理指令的作用是为了在程序中能够使用输入输出流和标准库函数,使得程序更加方便和简洁。
#include <Date.h> #include <iostream> using namespace std;
这不是一个问题,而是一个代码片段的开头部分。它包含了头文件和命名空间的声明。头文件<Date.h>可能是一个自定义的日期类,而<iostream>是C++标准库中用于输入输出的头文件。而using namespace std;则是为了避免在代码中频繁使用std::前缀。如果有问题需要进一步解答,请继续提问。