🎯问题一
给出下面的抽象基类container;要求建立2个继承container的派生类Sphere与Cylinder,每一个派生类都包含虚函数surface_area()和 volume(),分别用来计算球体和圆柱体的表面积及体积。写出主程序,应用C++的多态性,分别计算半径为5.0的球体以及半径为5.0和高为6.0的圆柱体的表面积和体积。🎯问题一
🎯问题二
已知一个有若干元素的数组arr,使用函数模板求该数组的的最大值,主函数定义数组,使用模板函数求最大值并输出。
🎯问题三
编写一个类模板对数组元素进行遍历输出、数组求和等,主函数创建数组类对象,调用函数遍历输出及求和。
🎯答案一
#include <iostream> using namespace std; class Container { //声明抽象类container protected: double radius; public: Container(double _radius) { //抽象类container的构造函数 radius=_radius; } virtual double surface_area()=0; //纯虚函数surface_area virtual double volume()=0; //纯虚函数volume }; /****************************************************/ //派生类sphere pi=3.14159 s=4*pi*r*r v=4/3*pi*r*r*r class Sphere:public Container { public: Sphere(double _radius); double surface_area(); double volume(); }; Sphere::Sphere(double _radius):Container(_radius) { } double Sphere::surface_area() { //s=4*pi*r*r return 4*3.14159*radius*radius; } double Sphere::volume() { //v=4/3*pi*r*r*r return 4.0/3*3.14159*radius*radius*radius; } /****************************************************/ //派生类Cylinder class Cylinder:public Container { public: Cylinder(double _radius,double _height); double surface_area(); double volume(); private: double height; }; Cylinder::Cylinder(double _radius,double _height):Container(_radius) { height=_height; } double Cylinder::surface_area() { return 2*3.14159*radius*height+2*3.14159*radius*radius; } double Cylinder::volume() { return 3.14159*radius*radius*height;; } int main() { Sphere sphere(2); cout<<"球体表面积:"<<sphere.surface_area()<<endl; cout<<"球体体积:"<<sphere.volume()<<endl; Cylinder Cylinder(2,3); cout<<"圆柱体表面积:"<<Cylinder.surface_area()<<endl; cout<<"圆柱体体积:"<<Cylinder.volume()<<endl; }
🎯答案二
#include <iostream> using namespace std; /****************************************************/ //函数模板max_arr template <class T> T max_arr(T arr[],int n) { T max=arr[0]; for(int i=1; i<n; i++) if(max<arr[i]) max=arr[i]; return max; } /****************************************************/ int main() { int a[5],k; for(k=0;k<5;k++) cin>>a[k]; cout<<"max="<<max_arr<int>(a,5)<<endl; }
🎯答案三
#include <iostream> using namespace std; template<class T> //类模板 class Array { private: int _size; T* _ptr; public: Array(T arr[], int s); void show(); T sum(); }; //构造函数 template<class T> Array<T>::Array(T arr[], int s) { _ptr = new T[s]; _size = s; for (int i=0; i<_size; i++) { _ptr[i]=arr[i]; } } //遍历输出函数 template<class T> void Array<T>::show() { for (int i=0; i<_size; i++) cout<<*(_ptr + i)<<" "; cout<<endl; } /****************************************************/ //求和函数 template<class T> T Array<T>::sum() { T s=0; for (int i=0; i<_size; i++) s=s+*(_ptr + i); return s; } /****************************************************/ int main() { int iArr[6] = { 2, 1, 3, 5, 4, 6 }; Array<int> a1(iArr, 6); a1.show(); cout<<"sum="<<a1.sum()<<endl; return 0; }