C++第六次实验报告
- 格式:doc
- 大小:64.50 KB
- 文档页数:7
电子信息工程学院2014级《C++语言程序设计》实验报告 姓名 缪佳能 学号 22201433210187
实验项目 多态性
实验目的和内容 (1)了解多态性的概念;
(2)掌握运算符重载的基本方法; (3)掌握虚函数的定义和使用方法; (4)掌握纯虚函数和抽象类的概念和用法
程序分和设计 3.程序分析和设计:本题运用了了继承container的派生类来计算正方体、球及柱体的
表面积以及体积。每一个的类里用了纯虚函数来求每个的表面积以及体积,这利用了函数的继承以及多态来使整体的程序编译避免重复。 #include using namespace std; class container { protected: double radius; public: container(double radius1); virtual double surface_area()=0; virtual double volume()=0; }; container::container(double radius1) { radius=radius1; } // 正方体 class cube: public container { public: cube(double radius1):container(radius1){} double surface_area(); double volume(); }; 电子信息工程学院2014级《C++语言程序设计》实验报告 double cube::surface_area() { double area; area=radius*radius*6; return area; } double cube::volume() { double V; V=radius*radius*radius; return V; } //球体 class sphere: public container { public: sphere(double radius1):container(radius1){} double surface_area(); double volume(); }; double sphere::surface_area() { double area; area=4*3.14*radius*radius; return area; } double sphere::volume() { double V; V=4*3.14*radius*radius*radius/3; return V; } //圆柱体 class cylinder:public cube { public: cylinder(double radius1,double radius2):cube(radius1) { radiu=radius2; } double surface_area(); double volume(); protected: double radiu; 电子信息工程学院2014级《C++语言程序设计》实验报告 }; double cylinder::surface_area() { double area; area=3.14*radiu*radiu*2+2*3.14*radiu*radius; return area; } double cylinder::volume() { double V; V=3.14*radiu*radiu*radius; return V; }
int main() { cube a(6.0); sphere b(5.0); cylinder c(6.0,5.0); double x,y; cout<<"正方体表面积:" void set::input(int d) //输入函数 { len = d; int i; for (i = 0; i{ cin >> s[i]; } } void set::disp() //输出显示函数 { int i; for (i = 0; i{ cout << s[i] << " "; } cout << endl; } set set::operator+(set &s1) //求和重载函数 { int i, j, z, n = 0; for (i = 0; i{ for (j = 0; j{ if (s[i] == s1.s[j]) { for (z = j; z{ s1.s[z] = s1.s[z + 1]; } s1.len--; } } } for (i = 0; i电子信息工程学院2014级《C++语言程序设计》实验报告 { s[len] = s1.s[i]; len++; } return *this; } set set::operator-(set &s1) //求差重载函数 { int i, j, z; for (i = 0; i{ for (j = 0; j{ if (s[i] == s1.s[j]) { for (z = i; zs[z] = s[z + 1]; len--; } } } return *this; } set set::operator*(set &s1) //求交函数重载 { int a[100]; int i, j, w = 0; for (i = 0; i{ for (j = 0; j{ if (s[i] == s1.s[j]) { a[w] = s[i]; w++; } } } for (i = 0; i{ s[i] = a[i]; } 电子信息工程学院2014级《C++语言程序设计》实验报告 len = w; return *this; } int main() { set A, B, C, D, E; int m, n; cout << "请输入集合A内元素个数:"; cin >> m; cout << "请输入集合A内元素:"; A.input(m); cout << "请输入集合B内元素个数:"; cin >> n; cout << "请输入集合B内元素:"; B.input(n); cout << "A并B(A+B):"; C = A + B; C.disp(); cout << "请输入集合A内元素个数:"; cin >> m; cout << "请输入集合A内元素:"; A.input(m); cout << "请输入集合B内元素个数:"; cin >> n; cout << "请输入集合B内元素:"; B.input(n); cout << "A差B(A-B):"; D = A - B; D.disp(); cout << "请输入集合A内元素个数:"; cin >> m; cout << "请输入集合A内元素:"; A.input(m); cout << "请输入集合B内元素个数:"; cin >> n; cout << "请输入集合B内元素:"; B.input(n); cout << "A交B(A*B):"; E = A*B; E.disp(); return 0; } 运行结果 3..结果正确